使用 Apps 脚本根据 2 个条件将一行从电子表格发送到另一个电子表格
Send a row from a spreadsheet to another based on 2 conditions with Apps Script
我正在尝试将一行从电子表格发送到另一个电子表格,下面的脚本工作正常。
但现在我正在尝试添加两个改进:
- 如果C列中有声音“黄色1”或“绿色2”或“红色3”或“棕色5”,则激活脚本
- 将行发送到目标电子表格后,从源电子表格中删除该行
我正在尝试:
IF statement
s.deleteRow(row)
但是我无法达到目标,因为有一些错误
function onEdit(event) {
if(r.getColumn() == 3 && r.getValue() == 'Yellow 1','Green 2','Red 3','Brown 5') {
var ss = SpreadsheetApp.openById('xxx');
var r = sss.getSheetByName('source');
var SRange = ss.getDataRange();
var A1Range = SRange.getA1Notation();
var SData = SRange.getValues();
var tss = SpreadsheetApp.openById('yyy');
var ts = tss.getSheetByName('destination');
s.getRange(row, 1, 1, numColumns).moveTo(ts);
ss.deleteRow(row);
}
}
我相信你的目标如下。
- 当
'Yellow 1','Green 2','Red 3','Brown 5'
的值之一被放入活动 Spreadsheet 的“来源”sheet 的“C”列中时,您想将此行移动到其他 Spreadsheet. 中的“目的地”sheet
- 您想通过 OnEdit 触发器运行 此脚本。
不幸的是,当我看到你的放映脚本时,我发现该脚本有很多修改点。例如r
、sss
、s
、row
的变量没有声明。那么,在这种情况下,下面的示例脚本怎么样?
示例脚本:
请将 var dstSheet = SpreadsheetApp.openById('###').getSheetByName('destination');
的 ###
替换为您的目标 Spreadsheet ID。而且,please install OnEdit trigger to the function installedOnEdit
。因为使用openById
时,需要使用可安装的触发器
function installedOnEdit(e) {
var range = e.range;
var sheet = range.getSheet();
var values = ['Yellow 1', 'Green 2', 'Red 3', 'Brown 5'];
if (sheet.getSheetName() == 'source' && range.columnStart == 3 && values.includes(range.getValue())) {
var dstSheet = SpreadsheetApp.openById('###').getSheetByName('destination');
var rowValue = sheet.getRange(range.rowStart, 1, 1, sheet.getLastColumn()).getValues()[0];
dstSheet.appendRow(rowValue);
sheet.deleteRows(range.rowStart, 1);
}
}
- 在此脚本中,当您编辑“source”sheet 的列“C”时,当编辑的值包含在
['Yellow 1', 'Green 2', 'Red 3', 'Brown 5']
的值中时,该行将移动到目标sheet。并且,该行被删除。
参考:
我正在尝试将一行从电子表格发送到另一个电子表格,下面的脚本工作正常。 但现在我正在尝试添加两个改进:
- 如果C列中有声音“黄色1”或“绿色2”或“红色3”或“棕色5”,则激活脚本
- 将行发送到目标电子表格后,从源电子表格中删除该行
我正在尝试:
IF statement
s.deleteRow(row)
但是我无法达到目标,因为有一些错误
function onEdit(event) {
if(r.getColumn() == 3 && r.getValue() == 'Yellow 1','Green 2','Red 3','Brown 5') {
var ss = SpreadsheetApp.openById('xxx');
var r = sss.getSheetByName('source');
var SRange = ss.getDataRange();
var A1Range = SRange.getA1Notation();
var SData = SRange.getValues();
var tss = SpreadsheetApp.openById('yyy');
var ts = tss.getSheetByName('destination');
s.getRange(row, 1, 1, numColumns).moveTo(ts);
ss.deleteRow(row);
}
}
我相信你的目标如下。
- 当
'Yellow 1','Green 2','Red 3','Brown 5'
的值之一被放入活动 Spreadsheet 的“来源”sheet 的“C”列中时,您想将此行移动到其他 Spreadsheet. 中的“目的地”sheet
- 您想通过 OnEdit 触发器运行 此脚本。
不幸的是,当我看到你的放映脚本时,我发现该脚本有很多修改点。例如r
、sss
、s
、row
的变量没有声明。那么,在这种情况下,下面的示例脚本怎么样?
示例脚本:
请将 var dstSheet = SpreadsheetApp.openById('###').getSheetByName('destination');
的 ###
替换为您的目标 Spreadsheet ID。而且,please install OnEdit trigger to the function installedOnEdit
。因为使用openById
时,需要使用可安装的触发器
function installedOnEdit(e) {
var range = e.range;
var sheet = range.getSheet();
var values = ['Yellow 1', 'Green 2', 'Red 3', 'Brown 5'];
if (sheet.getSheetName() == 'source' && range.columnStart == 3 && values.includes(range.getValue())) {
var dstSheet = SpreadsheetApp.openById('###').getSheetByName('destination');
var rowValue = sheet.getRange(range.rowStart, 1, 1, sheet.getLastColumn()).getValues()[0];
dstSheet.appendRow(rowValue);
sheet.deleteRows(range.rowStart, 1);
}
}
- 在此脚本中,当您编辑“source”sheet 的列“C”时,当编辑的值包含在
['Yellow 1', 'Green 2', 'Red 3', 'Brown 5']
的值中时,该行将移动到目标sheet。并且,该行被删除。