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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Google Sheet Script从(sheet1)导入行并增加目标上的行间隔(sheet2)相关的知识,希望对你有一定的参考价值。

我正在尝试从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;
  }
}    
答案

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

您可以使用while消除读取getSheetValues() method循环:

// 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]);
}

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

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

以上是关于Google Sheet Script从(sheet1)导入行并增加目标上的行间隔(sheet2)的主要内容,如果未能解决你的问题,请参考以下文章

Google Sheet Script:有没有办法在不停止脚本的情况下显示消息?

Google-Apps-Script 无法使用 getDataRange().setValues() 写回数据库

python 读取excel数据插入到另外一个excel

Python操作excel

python读取excel

如何从 Google Sheet API 导出 csv?