我具有下面从其他地方复制的功能。它基本上将您已经完成的行移动到同一文件中的另一张纸上(从纸原点移动到目标,触发器为“移动”)。
我想实现的是,能够将已完成的行移动到另一个Google工作表文件,而不是同一文件中的另一个工作表。我已经尝试了SpreadsheetApp.openByUrl和SpreadsheetApp.openByID,但是什么也没有发生,我期待一些权限请求等,但是什么也没有,甚至没有错误。有人可以帮我弄这个吗?
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Origin" && r.getColumn() == 10 && r.getValue() == "Move") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Target");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, (numColumns-1)).moveTo(target);
s.deleteRow(row);
}
我相信您的目标如下。
s.getRange(row, 1, 1, (numColumns-1))
的值复制到其他电子表格中Target
工作表的最后一行。为此,这个答案如何?
SpreadsheetApp.openByUrl
和SpreadsheetApp.openByID
,需要使用可安装的OnEdit事件触发器,而不是简单的OnEdit事件触发器。当使用简单触发器运行SpreadsheetApp.openByUrl
和SpreadsheetApp.openByID
时,会发生与权限有关的错误。move()
。因此,在这种情况下,将使用getValues
和setValues
。当上述几点反映到您的脚本时,它将变成如下。
请复制并粘贴以下脚本。并且,please install the OnEdit event trigger to the function of installedOnEdit
as the installable trigger。这样,在编辑单元格时,将运行installedOnEdit
。
SpreadsheetApp.openById
function installedOnEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Sheet1" && r.getColumn() == 10 && r.getValue() == "Move") {
var id = "###"; // Please set the Spreadsheet ID.
var dst = SpreadsheetApp.openById(id);
var targetSheet = dst.getSheetByName("Sheet2");
var row = r.getRow();
var numColumns = s.getLastColumn();
var srcRange = s.getRange(row, 1, 1, (numColumns-1));
s.deleteRow(row);
targetSheet.getRange(targetSheet.getLastRow() + 1, 1, 1, numColumns - 1).setValues(srcRange.getValues());
}
}