在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 );
}
知道如何才能让它发挥作用吗?
答案 0 :(得分:4)
正如您所发现的那样,copyValuesToRange()
是一个Range method,会影响Sheet Object与范围相同的Spreadsheet Object。没有一种原子方法可以将一系列值复制到另一个电子表格中,但是有很多方法可以实现。
这是一种方式。
getDataRange()
选择完整的数据范围,然后使用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);
}
答案 1 :(得分:0)
对于我通过导入和追加数据创建的某些历史仪表板,我使用了一个名为Sheetgo的附加组件。节省编程时间并帮助我解决可追溯性问题。