如何使以下代码将信息移动到两列而不是 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);
}
参考:
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); }