1

在 Google 电子表格中,我只想从一个电子表格的完整列表中获取值,并将其附加到另一个电子表格的列表底部。我的麻烦是使用该copyValuesToRange()函数会出现以下错误:

Target sheet and source range must be on the same spreadsheet.

这是我当前的代码:

function transferList() {
  var source = SpreadsheetApp.getActiveSpreadsheet();
  var target = SpreadsheetApp.openById("0ABCD"); 
  var target_sheet = target.getSheetByName("RFPData");
  var sheet = source.getSheetByName("RFP List");
  var sheet_last_row = sheet.getLastRow() + 1;
  var source_range = sheet.getRange("A2:I"+sheet_last_row);
  var sWidth=source_range.getWidth() + 1;
  var sHeight=source_range.getHeight() + 1;
  var last_row=target_sheet.getLastRow();
  source_range.copyValuesToRange(target_sheet , 1, sWidth, 
    last_row + 1, last_row + sHeight );
}

知道我怎样才能让它工作吗?

4

2 回答 2

4

如您所见,Range 方法会影响copyValuesToRange()与Range位于同一电子表格对象的工作表对象。没有一种原子方法可以将一系列值复制到另一个电子表格,但有多种方法可以做到这一点。

这是一种方法。

  • 从源表中,通过使用 选择完整的数据范围,getDataRange()然后将所有值抓取到 javascript 数组中,一次操作获取所有数据getValues()
  • 要忽略第一行标题,请使用javascript 数组方法splice()
  • 在目标工作表上找到您的目标,从当前存在的最后一行数据开始,使用getLastRow().
  • 使用 . 从下一行开始将源数据(不带标题)写入目标工作表setValues()

脚本:

function transferList() {
  var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("RFP List");
  var sourceData = sourceSheet.getDataRange().getValues();
  sourceData.splice(0,1);  // Remove header
  var targetSS = SpreadsheetApp.openById("0ABCD").getSheetByName("RFPData");
  var targetRangeTop = targetSS.getLastRow(); // Get # rows currently in target
  targetSS.getRange(targetRangeTop+1,1,sourceData.length,sourceData[0].length).setValues(sourceData);
}
于 2013-04-16T20:49:31.280 回答
0

对于我通过导入和附加数据创建的一些历史仪表板,我使用了一个名为 Sheetgo 的插件。节省我的编程时间并帮助我解决可追溯性问题。

于 2017-05-19T16:25:01.897 回答