1 回答
TA贡献1815条经验 获得超13个赞
解释:
基本思想是将我们想要删除的行存储到一个数组中,然后向后删除该行(按降序排列)。
您当前的解决方案与此解决方案之间的区别在于,现在我们还需要迭代数据,以确定需要删除哪些行。
解决方案:
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));
}
添加回答
举报