我对 Google Appscript 非常陌生,非常感谢这个社区的支持。使用 Stakeoverflow 社区上的不同帖子,我设计了一个应用脚本来将数据从一个工作表复制并粘贴到另一个工作表,并且工作正常(名为“复制”的工作表的数据粘贴到名为“粘贴”的工作表中)。我还创建了一个名为 Trigger 的工作表,并在单元格 A1 中创建了一个下拉菜单,现在我希望每次在该工作表中的下拉菜单更改时运行我的脚本。我已经检查了这个社区上的不同解决方案,但作为 appscirpt 的新手,无法为我的案例设计完美的解决方案。下面是该工作表和我当前脚本的链接。
https://docs.google.com/spreadsheets/d/1xy5eN8_PHXi9RPWK_EKg99dylaDjQ9lcilrSW0GP4B0/edit#gid=0
function Referesh() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var copySheet = ss.getSheetByName("Copy");
var pasteSheet = ss.getSheetByName("Paste");
var source = copySheet.getRange(2,1,copySheet.getLastRow(),2);
var rub = copySheet.getRange(2,1,copySheet.getLastRow(),2);
var destination =
pasteSheet.getRange(pasteSheet.getLastRow()+1,2,copySheet.getLastRow(),2);
source.copyTo((destination), {contentsOnly: true});
rub.clearContent();
console.log(pasteSheet.getLastRow());
}
以上任何帮助将不胜感激。
最佳答案
我相信您的目标如下。
- 您希望通过更改“触发器”工作表的单元格“A1”的下拉列表来自动运行脚本。
在这种情况下,如何使用 OnEdit 简单触发器,如下所示?
修改后的脚本:
请将以下脚本复制并粘贴到电子表格的脚本编辑器中并保存脚本。当您使用此脚本时,在这种情况下,请将“触发器”表的“A1”单元格的下拉列表更改为“运行”。这样,脚本就运行了。
function onEdit(e) {
var sheetName = "Trigger";
var runScript = "Run";
var { range, source, value } = e;
var sheet = range.getSheet();
if (sheet.getSheetName() != sheetName || range.columnStart != 1 || range.rowStart != 1 || value != runScript) return;
var ss = source;
var copySheet = ss.getSheetByName("Copy");
var pasteSheet = ss.getSheetByName("Paste");
var source = copySheet.getRange(2, 1, copySheet.getLastRow(), 2);
var rub = copySheet.getRange(2, 1, copySheet.getLastRow(), 2);
var destination = pasteSheet.getRange(pasteSheet.getLastRow() + 1, 2, copySheet.getLastRow(), 2);
source.copyTo((destination), { contentsOnly: true });
rub.clearContent();
console.log(pasteSheet.getLastRow());
range.setValue("Refresh"); // By this script, the value of "Run" is changed to "Refresh".
}
注意:
您的下拉列表中似乎有
Run
和Refresh
两个值。不幸的是,我不知道触发值。因此,在此示例脚本中,当下拉列表更改为“运行”时,该脚本将由简单触发器运行。如果您想更改此设置,请修改上面的脚本。当使用脚本编辑器直接运行
onEdit
时,会因为没有事件对象而发生错误。所以,请小心这一点。如果你想忽略触发值,我认为可以使用以下脚本。在本例中,下拉列表已更改,脚本已运行。
function onEdit(e) { var sheetName = "Trigger"; var { range, source } = e; var sheet = range.getSheet(); if (sheet.getSheetName() != sheetName || range.columnStart != 1 || range.rowStart != 1) return; var ss = source; var copySheet = ss.getSheetByName("Copy"); var pasteSheet = ss.getSheetByName("Paste"); var source = copySheet.getRange(2, 1, copySheet.getLastRow(), 2); var rub = copySheet.getRange(2, 1, copySheet.getLastRow(), 2); var destination = pasteSheet.getRange(pasteSheet.getLastRow() + 1, 2, copySheet.getLastRow(), 2); source.copyTo((destination), { contentsOnly: true }); rub.clearContent(); console.log(pasteSheet.getLastRow()); }
引用:
关于google-apps-script - 在下拉列表更改时运行 Google Apps 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74460106/