Gappscript 客户菜单触发复制范围到另一个电子表格范围的循环

Gappscript customer menu to trigger copy range to range of another spreadsheet for loop

我想要做的是根据从第 7 行开始的 p 列中的值传输行。如果 P 列中的单元格的值为“Order”,则将该行从 B 列复制到 Q 到完全分开已经传播sheet。我在目标 sheet.

中编写了脚本

目前我的脚本确实循环遍历行并将 console.log 我需要的数据...我的问题是我已经尝试了多种方法然后将数据写入正确的范围但无法理解out..我需要将数据写入从 row7 columnB 开始...需要一点帮助..

function transferMonth() {
 

// SETTING UP THE LAST MONTH SHEET TO PULL NON SOLD DATA FROM
  const lastmonthSheetss = SpreadsheetApp.openById("ID OF SPREADSHEET").getSheetByName("CDJR");
  const lastSourceRow = lastmonthSheetss.getLastRow();
  const sourceRange = lastmonthSheetss.getRange(7, 2, lastSourceRow, 15);
  const sourceData = sourceRange.getValues();

// SETTING UP THE SHEET WHERE WE WANT TO TRANSFER LAST MONTHS DATA TO
  const targetsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TestCopy");
  const lastRow = targetsheet.getLastRow();
  const lastCol = targetsheet.getLastColumn();
  var sdata = [];

  // KEY FOR ACCESSING THE DATA PULLED FROM LAST MONTHS SHEET
  //console.log (sourceData[0]);
  //console.log(sourceData[0][1]);
  //console.log(sourceData[0][3]);
  //console.log(sourceData[0][5])
  //console.log(sourceData[0][14])
  //console.log(sourceData[1][1]);
  //console.log(sourceData[1][14]);

  //SETTING UP PLACE TO STORE VALUES THAT NEED COPIED

  for (i = 0; i < sourceData.length; i++) {
    if (sourceData[i][14] === 'Order') {
      sdata.push.apply(sdata, lastmonthSheetss.getRange(i + 7, 2, 1, 15).getValues());
      sdata.push(i);
       }
   console.log(sdata)
  }
targetsheet.getRange(7,2).setValues(sdata);
}

你可以从这里开始。

脚本:

function transferMonth() {
  // SETTING UP THE LAST MONTH SHEET TO PULL NON SOLD DATA FROM
  const lastmonthSheetss = SpreadsheetApp.openById("ID OF SPREADSHEET").getSheetByName("CDJR");
  const lastSourceRow = lastmonthSheetss.getLastRow();
  const sourceRange = lastmonthSheetss.getRange(7, 2, lastSourceRow, 15);
  const sourceData = sourceRange.getValues();

  // SETTING UP THE SHEET WHERE WE WANT TO TRANSFER LAST MONTHS DATA TO
  const targetsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TestCopy");
  const lastRow = targetsheet.getLastRow();
  // use filter to only get the data with 'Order' as the 15th column
  var sdata = sourceData.filter(x => x[14] === 'Order');

  // always write starting at B7
  targetsheet.getRange(7, 2, sdata.length, sdata[0].length).setValues(sdata);
}

示例数据:

初始目标sheet:

输出:

注:

  • 您的主要问题是 setValues 的错误用法和数组上的推送索引,除此之外,您的代码应该仍然可以工作。