我有多个项目可将每日数据输出到自己的Google电子表格中。我想制作一张能够捕获这些数据的主表。这很容易使用importrange,但是当像这样导入大量数据时,电子表格变得非常非常慢,所以我希望使用脚本来复制和粘贴数据。
我知道如何使用以下代码手动设置脚本:
var sourceSpreadsheetID = "ID HERE";
var sourceWorksheetName = "SHEET NAME HERE";
var destinationSpreadsheetID = "ID HERE";
var destinationWorksheetName = "SHEET NAME HERE";
function importData() {
var thisSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetID);
var thisWorksheet = thisSpreadsheet.getSheetByName(sourceWorksheetName);
var thisData = thisWorksheet.getDataRange();
var toSpreadsheet = SpreadsheetApp.openById(destinationSpreadsheetID);
var toWorksheet = toSpreadsheet.getSheetByName(destinationWorksheetName);
var toRange = toWorksheet.getRange(1, 1, thisData.getNumRows(), thisData.getNumColumns())
toRange.setValues(thisData.getValues());
}
但理想情况下,我想使用数组轻松扩展列表。我已经设置了" import"表(见下图),所以我猜一个通过它的for循环可以让我这样做,但我不确定如何。
我非常感谢你们提供的任何帮助。谢谢!
答案 0 :(得分:0)
为了回答我自己的问题,我设法将以下内容拼凑在一起,似乎有效:
function importData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var keysSheet = ss.getSheetByName("Keys")
var targetSheet = ss.getSheetByName("Test")
var keys = keysSheet.getRange("B2:B50").getValues();
var sheets = keysSheet.getRange("C2:C50").getValues();
var ranges = keysSheet.getRange("D2:D50").getValues();
var row, startcolumn = 1;
for (row = 1; row < 50; row++) {
if (keys[row-1] != '' && sheets[row-1] != '' && ranges[row-1] != '') {
var sourceSpreadsheetID = keys[row-1];
var sourceWorksheetName = sheets[row-1];
var sourceDataRange = ranges[row-1];
var thisSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetID);
var thisWorksheet = thisSpreadsheet.getSheetByName(sourceWorksheetName);
var thisData = thisWorksheet.getRange(sourceDataRange);
var toRange = targetSheet.getRange(1, startcolumn, thisData.getNumRows(), thisData.getNumColumns());
toRange.setValues(thisData.getValues());
startcolumn = startcolumn + thisData.getNumColumns();
}
}
}
我确信这可以使用数组,while循环(而不是for循环)以及根据其大小自动更新的键表范围来更有效地完成,但我无法弄清楚如何用我的高中编码技巧来做到这一点。
希望到目前为止我所知道的将有助于其他人!