如何在通过此函数移动行后删除该行?

它基本上根据过滤器关键字将行从一张工作表移动到另一张工作表。然后如何从原始工作表中删除移动的行?


我已经尝试过,但我在 JavaScript 和 Apps Script 方面的少量知识并没有多大用处。


function myFunction() {

  const ss = SpreadsheetApp.getActive();

  const sh = ss.getSheetByName('Ark1');

  const filter_sh = ss.getSheetByName('Filter');

  const data = sh.getRange('A1:B'+sh.getLastRow()).getValues();

  const sh_names = filter_sh.getRange('A1:A'+filter_sh.getLastRow()).getValues().flat();

  sh_names.forEach(s=>{

    if(!ss.getSheetByName(s)){

    ss.insertSheet().setName(s);}

    let sheet = ss.getSheetByName(s);   

    let f_data = data.filter(r=>r[0].includes(s));

    if(f_data.length>0){

    sheet.getRange(sheet.getLastRow()+1,1,f_data.length,f_data[0].length).setValues(f_data);}

}); 

}


慕婉清6462132
浏览 83回答 1
1回答

萧十郎

解释:基本思想是将我们想要删除的行存储到一个数组中,然后向后删除该行(按降序排列)。您当前的解决方案与此解决方案之间的区别在于,现在我们还需要迭代数据,以确定需要删除哪些行。解决方案:function myFunction() {  const ss = SpreadsheetApp.getActive();  const sh = ss.getSheetByName('Ark1');  const filter_sh = ss.getSheetByName('Filter');  const sh_names = filter_sh.getRange('A1:A'+filter_sh.getLastRow()).getValues().flat();  var deleteRows = [];  sh_names.forEach(s=>{    if(!ss.getSheetByName(s)){    ss.insertSheet().setName(s);}    var copyData = [];    var new_sheet = ss.getSheetByName(s);    var tempData = sh.getRange('A1:B'+sh.getLastRow()).getValues();    tempData.reverse().forEach((r,i)=>{         if(r[0].includes(s)){        deleteRows.push(tempData.length-i);        copyData.push(r);}});   if(copyData.length>0){   new_sheet.getRange(new_sheet.getLastRow()+1,1,copyData.length,copyData[0].length).setValues(copyData);}}); deleteRows = deleteRows.filter((x, i, a) => a.indexOf(x) === i).sort((a, b) => b - a);deleteRows.forEach(r=>sh.deleteRow(r));}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript