【问题标题】:Copy/Push data from array into a sheet range one row at a time using Google Apps Script使用 Google Apps 脚本一次将数据从数组复制/推送到工作表范围中
【发布时间】:2018-02-25 14:36:02
【问题描述】:

我在原始表上使用 .getValues() 创建了一个多维数组 sheetValues[][]。我想将 sheetValues 数组中的值复制到目标工作表中。如何将 sheetValues 数组每一行的内容推送到目标工作表中?

什么函数允许我将数组的每一行一次推入(在检查 IF 条件后)到目标工作表的相应范围?

这里是sn-p的代码:

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++;
}

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    永远不要“一次推送一个数组的每一行”。这是一个笨重的代码,而且启动速度极慢。设置值与获取值非常相似。您声明一个范围变量,其具有适合尺寸的适当坐标你的 values[][] 数组,并将整个 values 数组传递给 Range 对象的 'setValues()' 方法。

    getRange() 的方法签名之一如下:

    sheet.getRange(row, column, numberOfRows, numberOfColumns);
    

    更多信息https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangerow-column-numrows-numcolumns

    前 2 个参数用于范围内最左上角的单元格,而其他参数定义范围应跨越的行数和列数。

    假设您想从目标工作表的第一个单元格开始插入值,这是您需要的单行代码。

    sheet.getRange(1, 1, sheetValues.length, sheetValues[0].length);
    

    行数是数组的长度,列数是数组第一个元素(行)的长度。

    更新

    我错过了隐藏在您的代码中的注释。您可以在将值写入目标工作表之前对其进行过滤。

    sheetValues = sheetValues.map(function(row){
    
    if (row[9] == 'Target') { return row;  }
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 2020-04-29
      • 2018-07-19
      相关资源
      最近更新 更多