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