我在原始表单上使用.getValues()创建了一个多维数组sheetValues [] []。我想将sheetValues数组中的值复制到目标表中。我怎么能将sheetValues数组的每一行的内容推送到目标表?
什么功能允许我一次一个地(在检查IF条件之后)将数组的每一行推到目标表的相应范围内?
以下是代码段:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Source Sheet"); //Source sheet that has all data
var lastRow = sheet.getLastRow(); //last row number of Source sheet
var sheetValues = sheet.getRange(1, 1, lastRow, 18).getDisplayValues; //Copy Display values to an array; getDisplayValues() is used instead of getValues() to ignore formulas in the source cells such as "IMPORTRANGE"
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetbyName('Target Sheet'); //destination sheet
var currentRow = targetSheet.getLastRow(); //current last row of the destination sheet (start copying after this row)
var target = targetSheet.getRange(currentRow+1, 1); //target range where the copying of data should begin in destination sheet
loop through each row of the array (sheetValues) to check if the status (column I) is 'On Target'; if yes, copy that entire row to the target range defined above
for (var i = 0; i <= lastRow; i++) {
if (sheetValues[i][9] == 'On Target') {
How do I copy/push the entire row at once (column 1 - 18) directly into the target range (currentRow, columns 1-18)? What function do I use?
}
currentRow++;
}
答案 0 :(得分:2)
永远不要一次一个地推动阵列的每一行&#34;。这是笨重的代码,启动速度极慢。设置值与获取值非常相似。您声明一个范围变量,其适当的坐标适合您的值[] []数组的维度,并将整个值数组传递给&#39; setValues()&#39; Range对象的方法。
getRange()的方法签名之一如下:
sheet.getRange(row, column, numberOfRows, numberOfColumns);
前两个参数用于范围中最左上角的单元格,而其他参数定义范围应跨越的行数和列数。
假设您想开始从目标表单中的第一个单元格插入值,这里是您需要的单行代码。
sheet.getRange(1, 1, sheetValues.length, sheetValues[0].length);
行数是数组的长度,列数是数组第一个元素(行)的长度。
<强>更新强>
我错过了代码中的评论。您可以在将值写入目标工作表之前对其进行过滤。
sheetValues = sheetValues.map(function(row){
if (row[9] == 'Target') { return row; }
});