为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕婉清6462132 2023-07-14 15:41:43
它基本上根据过滤器关键字将行从一张工作表移动到另一张工作表。然后如何从原始工作表中删除移动的行?我已经尝试过,但我在 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);}}); }
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超12个赞

解释:

  • 基本思想是将我们想要删除的行存储到一个数组中,然后向后删除该行(按降序排列)。

  • 您当前的解决方案与此解决方案之间的区别在于,现在我们还需要迭代数据,以确定需要删除哪些行。

解决方案:

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));

}


查看完整回答
反对 回复 2023-07-14
  • 1 回答
  • 0 关注
  • 63 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信