几天前我使用以下链接提出了类似的请求:
How to copy a specific row from one sheet to another (Google Apps Script)
现在我有新的需求需要你的帮助:
脚本应将 T 列中值为“No”的特定行从一张工作表复制到另一张工作表。重要的是它复制值和格式。
应该复制整行。
复制成功后,应删除源表中的行。
你能帮我吗?非常感谢!
到目前为止,您可以在下面找到@Marios 解决方案。在此再次非常感谢!
const ss = SpreadsheetApp.getActiveSpreadsheet();
const srcSheet = ss.getSheetByName("[Overview] All_Cases");
const tarSheet = ss.getSheetByName("OPS_FUNNEL");
const data = srcSheet.getDataRange().getValues().filter(r=>r[21]=='No').map(r => [r[0]]);
var tarlast = tarSheet.getRange("A:A").getValues().filter(String).length;
if (data.length>0){
tarSheet.getRange(tarlast+1,1,data.length,1).setValues(data);
}
答案 0 :(得分:2)
您可以将删除的行索引存储在过滤器函数本身中,然后使用 classical 方法向后删除行。
列 T 的数组索引为 19
,而不是 21
。小心这个。
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const srcSheet = ss.getSheetByName("[Overview] All_Cases");
const tarSheet = ss.getSheetByName("OPS_FUNNEL");
const rowsD = [];
const data = srcSheet.getDataRange().getValues()
.filter((r,i)=>{
let val = r[19]=='No';
if(val){
rowsD.push(i+1);
return val;
}
});
if (data.length>0){
tarSheet.getRange(tarSheet.getLastRow()+1,1,data.length,data[0].length).setValues(data);
for (var i = rowsD.length - 1; i>=0; i--) {
srcSheet.deleteRow(rowsD[i]);
}
};
}