【问题标题】:How to Collect data from ALL sheets using google Appscript如何使用 google Apps 脚本从所有工作表中收集数据
【发布时间】:2019-04-18 08:07:43
【问题描述】:

我的脚本在整个工作簿中搜索特定名称并返回该名称的所有数据。该脚本有效,但仅从工作簿中的一张工作表中收集数据。

我搜索了一些代码来帮助我获取所有工作表名称。所以我有代码可以做到这一点,但由于某种原因,它仍然只能从 1 张纸返回。

下面的代码收集了所有工作表名称。 然后在查询函数中调用此函数。 我怀疑这就是问题所在

function sheetnames() {

var out = new Array()
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();

for (var i=0 ; i < sheets.length ; i++) {
    var name = sheets[i].getName();

    var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(name);
    var values = data.getRange(4, 1, data.getLastRow(),

    data.getLastColumn()).getValues();
    out.push(values);
    }

return out; 
}

此函数然后搜索请求的数据。

function query() {

var Sheet = SpreadsheetApp.getActiveSpreadsheet();

var searchSheet = Sheet.getSheetByName("Search");   
var searchByName = searchSheet.getRange(4, 8).getValue();  

var uses = sheetnames();
var output = new Array();

var i = 0;
var r = 0;


do{
  var from = uses[i];

  do{
    var row = from[r];

    if(row == null){
      r++;
      continue;
    }

    if(searchByName != null ){
      var newName = row[7];
      if(newName == searchByName){
        output.push(row);
      } 
    }
     r ++;
    }while(r < from.length);
    i ++;

  }while(i < uses.length);

return output;
}

这部分只是将数据打印到单元格中,并附加到一个搜索图上,该图在工作表中运行该函数。

function search() {

 var Sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Search");

 var data = query();

 var count1 = 0; 


do{
  var subData = data[count1];
  var count2 = 0;

  do{
    var setTo = subData[count2];
    Sheet.getRange((count1 + 5), (count2 + 1)).setValue(setTo);
    count2 ++;
    }while(count2 < subData.length);

   count1 ++;
   }while(count1 < data.length); 
}

该表称为“每日付款表”。你可以想象有很多数据。每个工作表名称均按付款发生的月份和年份命名。更稳定的客户显然会在一个多月内购买。

因此,在搜索客户姓名时,我只返回了 1 个月(1 张数据)。我们有 2018 年 5 月至今的数据,所以同样,脚本不会从所有工作表中收集。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    您的代码可读性不强,所以我自己想出了一些东西并对其进行了简化。我假设的事情-您的搜索词在“搜索”表列 H4 中,您想在 H4 列中搜索该词的所有表,并在第 4 行后的“搜索”表中写出。试试这个。

    // return all rows from all sheets except Search sheet
    function sheetValues(ss) {
      var out = [];
      var sheets = ss.getSheets();
    
      for (var i = 0; i < sheets.length; i++) {
        var sheet = sheets[i];
        if (sheet.getName() == 'Search') continue;
        var values = sheet.getRange(4, 1, sheet.getLastRow() - 3, sheet.getLastColumn()).getValues();
        out.concat(values);
      }
    
      return out;
    }
    // search all rows for given term and return results
    // look for term in H column of every row
    function query(ss, term) {
      if (!term) return;
    
      var values = sheetValues(ss);
      var output = [];
    
      for (var i = 0; i < values.length; i++) {
        var row = values[i];
        var name = row[7]; // 7 = col H
        if (name == term) {
          output.push(row);
        }
      }
    
      return output;
    }
    // get search results and print into Search sheet
    function search() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getSheetByName('Search');
      var searchByName = sheet.getRange(4, 8).getValue(); // search term is in H4 cell
    
      var data = query(ss, searchByName);
    
      sheet.getRange(5, 1, sheet.getLastRow() - 4, sheet.getLastColumn()).clearContent();
      sheet.getRange(5, 1, data.length, data[0].length).setValues(data);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多