如何使以下代码将信息移动到两列而不是 google 工作表中的一列?

How can I make the following code move information into two columns instead of one in google sheets?

function setCalculate(){
 
var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1M/edit#gid=0");
  var srcSheet = ss.getSheetByName("AutoQuoteDataBase");
  var lastRow = srcSheet.getLastRow();
var values = srcSheet.getRange("A2:BY" + lastRow).getValues();
var res = values.flatMap(r => r[76] == 1 ? [r[1]] : []);
if (res.length == 0) return;
srcSheet.getRange("BW2").setValue(res[0]);
}

此代码完全符合其最初目的,即从 B 列复制 ID,假设 B2 是 'w131',B3 是 'z1122',等等

如果我在 BY 列中输入“1”,我需要用这些 ID 之一填充单元格 BW2,

并且它必须是相应的 ID,因此在 BY2 中放入“1”会用 'w131' 填充 BW2,在 BY3 中放入“1”会在 BW2 中填充 'z1122' 等

我需要的是在触发代码时将同一行从 BZ 列移动到 CB2。

我相信你的目标如下。

  • 当单元格“BY”被编辑为1时,您想将单元格“B”复制到“BW”。
  • 您想通过触发器运行脚本。

这样的话,下面的修改怎么样?

修改后的脚本:

请将以下脚本复制并粘贴到脚本编辑器中并保存脚本。当您使用此脚本时,请将1 放入“AutoQuoteDataBase”sheet 的“BY”列。这样,脚本就是运行.

function onEdit(e) {
  var range = e.range;
  var sheet = range.getSheet();
  if (sheet.getSheetName() != "AutoQuoteDataBase" || range.columnStart != 77 || range.getValue() != 1) return;
  sheet.getRange("B" + range.rowStart).copyTo(sheet.getRange("BW" + range.rowStart), {contentsOnly: true});

注:

  • 此脚本是 运行 通过 onEdit 的简单触发器。所以当你直接运行这个脚本的时候,就会出现TypeError: Cannot read property 'range' of undefined这样的错误。请注意这一点。

  • 比如想通过勾选BY列将B列复制到BW列,而不用onEdit,也可以使用如下脚本。这种情况下,可以直接用脚本编辑器运行这个功能

      function myFunction() {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var srcSheet = ss.getSheetByName("AutoQuoteDataBase");
        var lastRow = srcSheet.getLastRow();
        var values = srcSheet.getRange("A2:BY" + lastRow).getValues();
        var res = values.map(r => [r[76] == 1 ? r[1] : null]);
        if (res.length == 0) return;
        srcSheet.getRange("BW2:BW" + (res.length + 1)).setValues(res);
      }
    

参考: