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:有没有办法在不停止脚本的情况下显示消息?