在多个电子表格的文件中查找匹配值

Find matching value in a file for multiple spreadsheets

我在一个文件夹中有多个 spreadsheets,每个 spreadsheet 我想从外部文件中获取匹配的数据。 例如,如果我的 spreadsheet 被称为 'iphone 7',我想在 sheet 中获取包含 'iphone 7'

的外部文件中的所有记录

这是我的进展(我是脚本编写的新手!):

function myfunction()
{ 
 var root = DriveApp.getFoldersByName("Produits");                                        
  while (root.hasNext())
  { 
   var folder = root.next();    //If the folder is available, get files in the folder
   var files = folder.getFiles();                                                                       
   while(files.hasNext())       //For each file,                                                                    
   { 
    var spreadsheet = SpreadsheetApp.open(files.next()); 

    //import data from URL
     var csvUrl = "https://incensy.tempurl.host/test-ct-flux.csv";
  var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
  var csvData = Utilities.parseCsv(csvContent);
 
  var sheets = spreadsheet.getSheets()
  var sheetIndex=0
  var sheet = sheets[sheetIndex]
   sheet.getRange(2, 1, csvData.length, csvData[0].length).setValues(csvData);

//Only keep data that contains the file name
  var name = spreadsheet.getName();
  let range = sheet.getDataRange(),
      maxRows = sheet.getMaxRows(),
      srchCol_1 = 2,
      srchPatt_1 = new RegExp(name, "i"),
      newRangeVals = range.getValues().filter(r => r[0] && srchPatt_1.exec(r[srchCol_1])),   
      numRows = newRangeVals.length;  
  range.clearContent();
  sheet.getRange(2,1, numRows, newRangeVals[0].length).setValues(newRangeVals);
  console.log('myfunction')
  sheet.deleteRows(numRows + 1, maxRows - numRows);

   }
  }
 }

代码的第二部分有问题我无法理解。

你的情况,下面的修改怎么样?

修改后的脚本:

function myfunction() {
  var keywords = ["sample1", "sample2"]; // Please set the keywords you want to filter to the column "C".

  // Retrieve CSV data.
  var csvUrl = "https://incensy.tempurl.host/test-ct-flux.csv";
  var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
  var csvData = Utilities.parseCsv(csvContent, ";");

  // Retrieve Spreadsheet and put the CSV data.
  var root = DriveApp.getFoldersByName("Produits");
  while (root.hasNext()) {
    var folder = root.next();
    var files = folder.getFiles();
    while (files.hasNext()) {
      var spreadsheet = SpreadsheetApp.open(files.next());
      var name = spreadsheet.getName().toUpperCase();
      var values = csvData.reduce((ar, r) => {
        if (!keywords.some(e => r[2].includes(e)) && r.join("").toUpperCase().includes(name)) {
          ar.push(r);
        }
        return ar;
      }, []);
      if (values.length == 0) continue;
      var sheet = spreadsheet.getSheets()[0];
      sheet.clearContents().getRange(1, 1, values.length, values[0].length).setValues(values);
    }
  }
}
  • 在此修改中,CSV 数据是在 while 循环外部检索的。使用检索到的 CSV 数据和每个电子表格名称,将数据放入每个电子表格的第一个选项卡。

参考文献: