如何为 GSheets 正确编写脚本,以无误地复制和粘贴不同的范围?

How do I write a script correctly for GSheets that copy and pastes different ranges without errors?

我有一个脚本可以很好地复制和粘贴从示例 Sheet1 范围:A1:C200 到 Sheet2 范围:A1:C200 的范围。我的问题是我的行数在 200 到 3000 行之间不断变化,具体取决于我每天导入到电子表格中的数据,目前我不得不不断地手动写入每个范围。

是否可以编写一个脚本,每次都适应可变的行范围,并将整个范围从列 A,B,C 复制到可用数据的最后一行,如范围公式:A1:C? 请参阅脚本示例。

原剧本:(有效)

function copy() {  
  var OriginalRange=SpreadsheetApp.openById('Spreadsheet ID').getSheetByName('Sheet1').getRange("A1:C200");
  var DestinationRange=SpreadsheetApp.openById('Spreadsheet ID').getSheetByName('Sheet2').getRange("A1:C200");
DestinationRange.setValues(OriginalRange.getValues());

}

理想变量范围脚本:(异常:行数不匹配错误)

function copy() {  
  var OriginalRange=SpreadsheetApp.openById('Spreadsheet ID').getSheetByName('Sheet1').getRange("A1:C");
  var DestinationRange=SpreadsheetApp.openById('Spreadsheet ID').getSheetByName('Sheet2').getRange("A1:C");
DestinationRange.setValues(OriginalRange.getValues());

}

您只需要 getLastRow() 即可获取包含内容的最后一行。您只需要稍微重构一下代码:

function copy() {  
  var OriginalSheet = SpreadsheetApp.openById('Spreadsheet ID').getSheetByName('Sheet1')
  var OriginalRange=OriginalSheet.getRange("A1:C"+OriginalSheet.getLastRow());
  var DestinationSheet = SpreadsheetApp.openById('Spreadsheet ID').getSheetByName('Sheet2')
  var DestinationRange=DestinationSheet.getRange("A1:C"+OriginalSheet.getLastRow());
  DestinationRange.setValues(OriginalRange.getValues());
}

注意:

这种方法只有在最后一行内容确实在 A:C.

列范围内时才有效