修改代码-将范围复制到另一个电子表格Google表格

时间:2019-12-23 23:30:56

标签: google-apps-script 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);

但是没用

谁能告诉我我哪里出问题了

谢谢

1 个答案:

答案 0 :(得分:0)

  • 在编辑单元格后,您要将值和格式从s.getRange(row, 1, 1, numColumns)复制到TOP UP NEEDED的电子表格中sheet ID的最后一行。

如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。

修改点:

很遗憾,在当前阶段,类别范围的copyTo()不能用于其他电子表格。

模式1:

在这种模式下,使用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);

模式2:

在此模式下,使用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事件触发器的可安装触发器。在这种情况下,请按如下所示修改函数名称。

参考:

如果我误解了您的问题,而这不是您想要的方向,我深表歉意。