Google Sheet Script从(sheet1)导入行并增加目标上的行间隔(sheet2)

时间:2018-03-05 20:46:13

标签: google-apps-script import google-sheets

我正在尝试从Sheet中导入数据,并且每9行在目标上增加行间隔导入“设置值”。 我正在尝试这个脚本(下面),但导入时它无法正常工作。写作正常。

我该怎么做?感谢您的关注。 例如:https://docs.google.com/spreadsheets/d/1xFtfiHZqd7JhIAkwxJ8JVnqx-21d2cj43nmHnvWLOpg/edit?usp=sharing

function abc()
{
  var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DATA");
  var startData = 3;
  var endData = 1000;  
  while (startData < endData) {
    var content = sourceSheet.getRange(startData, 1);
    startData += 1;  
  }

  var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Target");  
  var startTarget = 3;
  var endTarget = 1000;  
  while (startTarget < endTarget) {
    targetSheet.getRange(startTarget, 1).setValue(content);
    startTarget += 9;
  }
}    

1 个答案:

答案 0 :(得分:0)

导入无法按预期工作的原因是因为您的代码会在content循环的每次迭代中覆盖while的现有值。说实话,我很惊讶Apps脚本代码编辑器没有标记您的代码效率低下,建议您使用批量读取方法。

您可以使用getSheetValues() method

取消阅读while循环
// Read the content data into an array of arrays:
// content[0] = first row; content[2][0] = value in first column in 3rd row
var numRows = endData - startData;
var numCols = 1;
var content = sourceSheet.getSheetValues(startData, 1, numRows, numCols);

然而,没有用于获取/写入非连续范围的批处理方法,因此递增写入确实需要循环。而不是while循环,for循环可以更容易正确实现:

// Write all data from the content array to the target starting row,
// and then every 9th row thereafter. (e.g. rows 3, 12, 21, 30....)
for(var row = 0; row < content.length; ++row) {
  targetSheet.getRange(startTarget + 9 * row, 1).setValue(content[row][0]);
}

如果您真的想丢弃content的8/9,那么相应的while循环将是:

var row = 0;
while (startTarget < endTarget && row < content.length) {
  targetSheet.getRange(startTarget, 1).setValue(content[row][0];
  ++row;
  startTarget += 9;
}