将行移动到另一个 sheet 并清除内容/ ArrayFormula
Moving Row to another sheet and clear content/ ArrayFormula
短篇小说:
如何修改下面的脚本以清除行中多个单元格中的内容?例如第 7、13、24、25、34 行
长话短说(如果有更好的解决方案):
我一直在使用这个脚本根据一个值在 sheet 之间移动行,而不保留格式,所以下一个 sheet 有自己的格式,条件格式没有叠加.
function onEditComplete(e) {
//e.source.toast('Entry');
//Logger.log(JSON.stringify(e));
const sh=e.range.getSheet();
if(sh.getName()=="Sheet1a" && e.range.columnStart==5 && e.value=="Completed") {
//e.source.toast('Conditional');
var tsh=e.source.getSheetByName("Sheet2a");
tsh.getRange(tsh.getLastRow()+1,1,1,sh.getLastColumn()).setValues(sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).
getValues());
sh.deleteRow(e.range.rowStart);}
}
我现在遇到的问题是我在使用公式。
我有 4 sheets。 Sheet1a 和 Sheet1b 之间有 vlookup 公式。 Sheet2a 和 Sheet2b 之间也将具有相同的 Vlookup 公式。
=ArrayFormula(IFERROR(VLOOKUP(PARTS!$B1:$B,{PARTS!$B1:$B,PARTS!$AF1:$BD&","&PARTS!$AJ1:$AJ&","&PARTS!$AN1:$AN&","&PARTS!$AR1:$AR&","&PARTS!$AV1:$AV&","&PARTS!$AR1:$AR&","&PARTS!$AZ1:$AZ},2,0)))
因为它是一个 ArrayFormula,只要设置了 Sheet2a 和 Sheet2b 应该只是清除移动之前的特定单元格,因为它作为文本值传输并破坏 Sheet2a 和 Sheet2b.
中的公式
添加清除第 7、13、24、25、34 行中某些单元格的功能
function onEdit(e) {
e.source.toast('Entry');
Logger.log(JSON.stringify(e));
const sh = e.range.getSheet();
if (sh.getName() == "Sheet0" && e.range.columnStart == 5 && e.value == "Completed") {
e.source.toast('Conditional');
let cols = [7, 13, 24, 25, 34];
let row = sh.getRange(e.range.rowStart, 1, 1, sh.getLastColumn()).getValues().flat().map((e, i) => {
if (~cols.indexOf(i + 1)) {
return null;
} else {
return e;
}
})
var tsh = e.source.getSheetByName("Sheet1");
tsh.getRange(tsh.getLastRow() + 1, 1, 1, sh.getLastColumn()).setValues([row]);
sh.deleteRow(e.range.rowStart);
}
}
短篇小说: 如何修改下面的脚本以清除行中多个单元格中的内容?例如第 7、13、24、25、34 行
长话短说(如果有更好的解决方案):
我一直在使用这个脚本根据一个值在 sheet 之间移动行,而不保留格式,所以下一个 sheet 有自己的格式,条件格式没有叠加.
function onEditComplete(e) {
//e.source.toast('Entry');
//Logger.log(JSON.stringify(e));
const sh=e.range.getSheet();
if(sh.getName()=="Sheet1a" && e.range.columnStart==5 && e.value=="Completed") {
//e.source.toast('Conditional');
var tsh=e.source.getSheetByName("Sheet2a");
tsh.getRange(tsh.getLastRow()+1,1,1,sh.getLastColumn()).setValues(sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).
getValues());
sh.deleteRow(e.range.rowStart);}
}
我现在遇到的问题是我在使用公式。 我有 4 sheets。 Sheet1a 和 Sheet1b 之间有 vlookup 公式。 Sheet2a 和 Sheet2b 之间也将具有相同的 Vlookup 公式。
=ArrayFormula(IFERROR(VLOOKUP(PARTS!$B1:$B,{PARTS!$B1:$B,PARTS!$AF1:$BD&","&PARTS!$AJ1:$AJ&","&PARTS!$AN1:$AN&","&PARTS!$AR1:$AR&","&PARTS!$AV1:$AV&","&PARTS!$AR1:$AR&","&PARTS!$AZ1:$AZ},2,0)))
因为它是一个 ArrayFormula,只要设置了 Sheet2a 和 Sheet2b 应该只是清除移动之前的特定单元格,因为它作为文本值传输并破坏 Sheet2a 和 Sheet2b.
中的公式添加清除第 7、13、24、25、34 行中某些单元格的功能
function onEdit(e) {
e.source.toast('Entry');
Logger.log(JSON.stringify(e));
const sh = e.range.getSheet();
if (sh.getName() == "Sheet0" && e.range.columnStart == 5 && e.value == "Completed") {
e.source.toast('Conditional');
let cols = [7, 13, 24, 25, 34];
let row = sh.getRange(e.range.rowStart, 1, 1, sh.getLastColumn()).getValues().flat().map((e, i) => {
if (~cols.indexOf(i + 1)) {
return null;
} else {
return e;
}
})
var tsh = e.source.getSheetByName("Sheet1");
tsh.getRange(tsh.getLastRow() + 1, 1, 1, sh.getLastColumn()).setValues([row]);
sh.deleteRow(e.range.rowStart);
}
}