0

我的谷歌驱动器中有数百份报告。每个报告都是它自己的文件(电子表格,只有一张)。

我需要所有这些电子表格中的单元格 B10。如果有一个带有两个参数的函数会很棒:

  1. 包含电子表格文件的目录的名称
  2. 您想要总计的特定单元格。

我试着做脚本

function Suma(cell)
{
  var files = DocsList.getFilesByType('spreadsheet', 0, 100);
  for (var i = 0; i < files.length; i++)
  {
   var sheets = SpreadsheetApp.open(files[i]).getSheets();
   var sum = 0;
   for (var i = 0; i < sheets.length ; i++ )
   {
     var sheet = sheets[i];
     var val = sheet.getRange(cell).getValue();

        if (typeof(val) == 'number') 
        {
            sum += val;   
        }
   }
  }
  return sum;
}

当然需要一些帮助:) THX

4

2 回答 2

0

你正在做的事情是好的,但是你可能想要列出一个文件夹上的文件而不是整个驱动器。如果你有太多的 ss 并且脚本会超时,也会失败。解决这个问题是可能的,但需要更复杂的代码。最好在客户端使用 jsapi 或 appengine。

于 2013-04-03T14:08:12.360 回答
0

由于打开每个电子表格需要时间,这将是缓慢的,并且有超时的风险。

此版本的函数将采用文件夹名称和目标单元格,并从文件夹中的所有电子表格中生成该位置的数值总和。

文件夹和文件的集合DriveApp依赖迭代器而不是数组,因此您有两个使用.hasNext().next()访问集合中对象的示例。

function Suma(folderName, cell)
{
  var folders = DriveApp.getFolders();
  var folderFound = false;
  var folder;
  while (folders.hasNext() && !folderFound) {
    folder = folders.next();
    folderFound = folder.getName() == folderName;
  }
  if (!folderFound) throw "No folder named " + folderName;  // Error

  var sheets = folder.getFilesByType(MimeType.GOOGLE_SHEETS);
  var sum = 0;
  while (sheets.hasNext()) {
    var sheet = SpreadsheetApp.openById(sheets.next().getId());
    var val = sheet.getActiveSheet().getRange(cell).getValue();
    if (typeof(val) == 'number') {
      sum += val;   
    }
  }
  return sum;
}
于 2013-08-23T21:53:07.917 回答