[英]Modify Code - Copy Certain Rows/Columns From one Spreadsheet to Another - Google Apps Script / Google Sheets
[英]Modify Code - Copy Range to another Spreadsheet Google Sheets
下面的代码复制范围并移动到名为“需要充值”的同一工作簿中的下一个电子表格。
我希望它将此数据发送到另一个工作簿中的另一个电子表格。
function onEdit(event) {
// assumes source data in sheet named PrepSheet
// target sheet of move to named TOP UP NEEDED
// getColumn with check-boxes is currently set to column I
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "PrepSheet" && r.getColumn() == 9 && r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("TOP UP NEEDED");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
}
}
我尝试更换
var targetSheet = ss.getSheetByName("TOP UP NEEDED");
和
var targetSheet = SpreadsheetApp.openById("sheet ID").getSheetByName("TOP UP NEEDED");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
但它没有用
谁能告诉我我哪里出错了
谢谢
s.getRange(row, 1, 1, numColumns)
的值和格式复制到工作sheet ID
电子表格中TOP UP NEEDED
表的最后一行。如果我的理解是正确的,这个答案怎么样? 请将此视为几种可能的答案之一。
不幸的是,在现阶段,Class range 的copyTo()
不能用于其他电子表格。
在此模式中,使用了copyTo()
。 因此,值和单元格格式都被复制。
当您的脚本被修改时,请进行如下修改。
从: var targetSheet = ss.getSheetByName("TOP UP NEEDED"); var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); s.getRange(row, 1, 1, numColumns).copyTo(target);
到:
var targetSS = SpreadsheetApp.openById("sheet ID"); s = SpreadsheetApp.getActiveSheet(); var tempSheet = s.copyTo(targetSS); var targetSheet = targetSS.getSheetByName("TOP UP NEEDED"); var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); tempSheet.getRange(row, 1, 1, numColumns).copyTo(target); targetSS.deleteSheet(tempSheet);
在此模式中,使用了getValues()
和appendRow()
。 所以只复制值。
当您的脚本被修改时,请进行如下修改。
从: var targetSheet = ss.getSheetByName("TOP UP NEEDED"); var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); s.getRange(row, 1, 1, numColumns).copyTo(target);
到:
var targetSheet = SpreadsheetApp.openById("sheet ID").getSheetByName("TOP UP NEEDED"); var sourceValues = s.getRange(row, 1, 1, numColumns).getValues()[0]; targetSheet.appendRow(sourceValues);
在这个修改中,不能使用onEdit()
的简单触发器。 在openById()
处发生错误。 所以请使用 OnEdit 事件触发器的可安装触发器。 在这种情况下,请按如下方式修改函数名称。
从
function onEdit(event) {
到
function installedOnEdit(event) {
本次修改后, 请将OnEdit事件触发器installedOnEdit
到installedOnEdit
作为可安装触发器。 这样,当单元格被编辑时, installedOnEdit
会在没有双重执行的情况下运行。 请注意这一点。
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.