0

Google ドライブに何百ものレポートがあります。各レポートは独自のファイル (スプレッドシート、1 シート) です。

これらすべてのスプレッドシートからセル B10 の合計が必要です。2 つのパラメーターを取る関数があれば素晴らしいでしょう。

  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

これは遅くなり、各スプレッドシートを開くのに時間がかかるため、タイムアウトするリスクがあります。

このバージョンの関数は、フォルダー名とターゲット セルを受け取り、フォルダー内のすべてのスプレッドシートからその場所の数値の合計を生成します。

は、フォルダーとファイルのコレクションの配列ではなく反復子DriveAppに依存しているため、コレクション内のオブジェクトの使用とアクセスの 2 つの例があります。.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 に答える