使用带有数组

时间:2015-11-26 12:28:55

标签: merge google-sheets

我有多个项目可将每日数据输出到自己的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循环可以让我这样做,但我不确定如何。

Image of table

我非常感谢你们提供的任何帮助。谢谢!

1 个答案:

答案 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循环)以及根据其大小自动更新的键表范围来更有效地完成,但我无法弄清楚如何用我的高中编码技巧来做到这一点。

希望到目前为止我所知道的将有助于其他人!