首页 > 解决方案 > 在 Appscript 中复制带有条件的值

问题描述

我在一个文件夹中有 6 个不同的电子表格,它们都有一个名为“3.reporting”的通用工作表我只想从列年份等于 2021 的每个电子表格中复制值。这是年份位置的屏幕截图 下面是我用来提取数据的代码,但它会提取所有内容,包括名为“1.master_courses”的电子表格的空白行这是一个示例文件是目标文件电子表格

function courseMaster() {
  //1NNBpm9zfzvpMbIPlZHvGKUV3BgO
  var folder = DriveApp.getFolderById("1NNBpm9zfzvpMbIPlZHvGKUV3BgO");
  var filesIterator = folder.getFiles();
  var file;
  var fileType;
  var ssID;
  var combinedData = [];
  var data;
  while (filesIterator.hasNext()){
    file = filesIterator.next();
    fileType = file.getMimeType();
     if(fileType === "application/vnd.google-apps.spreadsheet"){
      ssID = file.getId();
      data = getDataFromSpreadsheet (ssID);
      data = data.map(function(r){ return r.concat([file.getName()]);});
      combinedData = combinedData.concat(data);   
    }//if ends here 
  }//while ends here  
 var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("1.master_courses");
 ws.getRange("A2:AA").clearContent();
 ws.getRange(2, 1, combinedData.length, combinedData[0].length).setValues(combinedData); 
  }
function getDataFromSpreadsheet (ssID){
  var ss = SpreadsheetApp.openById(ssID);
  var ws = ss.getSheetByName("3.reporting");
  var data = ws.getRange("A2:Z" + ws.getLastRow()).getValues();
  return data
}
///***Sheet_Names***///
function sheetnames() {
  var out = new Array()
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  for (var i=0 ; i<sheets.length ; i++) out.push( [ sheets[i].getName() ] )
  return out 
}

标签: google-apps-scriptgoogle-sheets

解决方案


在该行} // while ends here粘贴该行之后:

combinedData = combinedData.filter(x => x[0] == "2021");

如果您需要添加条件,您可以这样做:

combinedData = combinedData.filter(x => (x[0] == "2021") && (x[1] != ""));

x[0]是第一个单元格 (A),x[1]是第二个单元格 (B),等等。您可以为单元格添加任何条件:&& (and)、|| (或)等。如果这些条件的结果为 True,则该行将留在表中(通过过滤器),如果结果为 False,则该行将被省略(未通过过滤器)。


推荐阅读