复制符合条件的特定行,将一张纸复制到另一张纸上

时间:2021-02-09 09:17:52

标签: google-apps-script google-sheets

几天前我使用以下链接提出了类似的请求:

How to copy a specific row from one sheet to another (Google Apps Script)

现在我有新的需求需要你的帮助:

  1. 脚本应将 T 列中值为“No”的特定行从一张工作表复制到另一张工作表。重要的是它复制值和格式。

  2. 应该复制整行。

  3. 复制成功后,应删除源表中的行。

你能帮我吗?非常感谢!

到目前为止,您可以在下面找到@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);  
  }

1 个答案:

答案 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]); 
    }
  };
}