web-dev-qa-db-ja.com

とにかくIMPORTRANGE()を呼び出してすべてのシートを含める方法はありますか?

以下は、現在のデータと最初のアーカイブを結合する私の現在の機能です。将来のフェイルセーフとして設定したいので、新しいアーカイブがある場合はインポートに含まれます:

QUERY({ARRAYFORMULA({IMPORTRANGE("****","'Current'!A2:Z");IMPORTRANGE("*****","'Archive1'!A2:Z")})},"select *") 

それを行う方法はありますか?

2

現在のスプレッドシートであっても、組み込みのスプレッドシート関数を使用してシート名のリストを取得する方法はありません。 script を使用して、シート名を取得し、数式を自動的に作成できます。以下のスクリプトは、スプレッドシートを開いたときに、メニュー項目「インポート」>「すべてのシート」をメニューに追加します。呼び出されると、スクリプトに含まれるURLを使用してスプレッドシートからシート名を取得し、現在のシートのセルA2に複雑なimportrange数式を配置します。

余談:{...;...}の前にarrayformulaは必要ありません。また、select *を使用したクエリは何の役にも立ちません。

function importall() {
  var url = 'https://docs.google.com/spreadsheets/d/...';  // put URL here
  var ss = SpreadsheetApp.openByUrl(url);
  var imports = ss.getSheets().map(function(s) {
    return 'importrange("' + url + '", "\'' + s.getName() + '\'!A2:Z")'; 
  });
  var formula = '={' + imports.join('; ') + '}';
  SpreadsheetApp.getActiveSheet().getRange("A2").setFormula(formula);
}

function onOpen() {
  SpreadsheetApp.getActiveSpreadsheet().addMenu("Import", [{name: "all sheets of doc X",  functionName: "importall"}]);
}
1
user79865