开发者问题收集

Google 脚本:根据多种条件将行移动到不同的工作表

2020-11-16
447

我创建了一个电子表格,我想根据某个特定单元格中的数据将其分开。主电子表格有一列,表示“迟到、纪律、强化”。我想将“迟到”和“强化”移到它们自己的电子表格中。此外,我想在适当的工作表中删除“迟到”和“强化”行。这样一来,我总共有三个电子表格。

我之前使用过一个脚本,它可以将我的迟到行移到另一个电子表格中。但是,无论出于什么原因,我都没有收到错误消息“TypeError:无法读取未定义的属性‘length’(第 19 行,文件“Code”)。

我一直在研究这个问题,很可能我搞砸了一些东西。我没有编码经验,但我正在尽力解决这个问题。目前,我拥有的脚本如下。任何帮助都将不胜感激。

function copyrange() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Minor Infractions - Current'); //source sheet
  var testrange = sheet.getRange('O:O'); //range to check
  var testvalue = (testrange.getValues());
  var csh = ss.getSheetByName('Tardies - Current'); //destination sheet
  var data = [];
  var j =[];

  //Condition check in O:O; If true copy the same row to data array
for (i=0; i<testvalue.length;i++) {
  if ( testvalue[i] == 'Tardy') {
  data.push.apply(data,sheet.getRange(i+1,1,1,25).getValues());
  //Copy matched ROW numbers to j
  j.push(i);
 }
 }
//Copy data array to destination sheet
 csh.getRange(csh.getLastRow()+1,1,data.length,data[0].length).setValues(data); 

//Delete matched rows in the source sheet
  for (i=0;i<j.length;i++){
  var k = j[i]+1;
  sheet.deleteRow(k);

//Alter j to account for deleted rows
  if (!(i == j.length-1)) {
  j[i+1] = j[i+1]-i-1;
}
}
}
2个回答

at 这个答案说 ,您可以使用功能来完成此操作:

546019969

请记住,此功能是指导,您不能仅复制和粘贴,您必须填写值

Baby_Boy
2020-11-16

尝试一下:

function copyrange() {
  const ss=SpreadsheetApp.getActive();
  const sheet=ss.getSheetByName('Minor Infractions - Current');
  const testrange=sheet.getRange(1,15,sheet.getLastRow()); 
  const testvalue=testrange.getValues();
  const csh=ss.getSheetByName('Tardies - Current');
  let data=[];
  let d=0;
  for (let i=0;i<testvalue.length;i++) {
    if (testvalue[i]=='Tardy') {
      data.push(sheet.getRange(i+1,1,1,25).getValue());
      sheet.deleteRow(i+1-d++);
    }
  }
  csh.getRange(csh.getLastRow()+1,1,data.length,data[0].length).setValues(data); 
}    
Cooper
2020-11-16