以下は、現在のデータと最初のアーカイブを結合する私の現在の機能です。将来のフェイルセーフとして設定したいので、新しいアーカイブがある場合はインポートに含まれます:
QUERY({ARRAYFORMULA({IMPORTRANGE("****","'Current'!A2:Z");IMPORTRANGE("*****","'Archive1'!A2:Z")})},"select *")
それを行う方法はありますか?
現在のスプレッドシートであっても、組み込みのスプレッドシート関数を使用してシート名のリストを取得する方法はありません。 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"}]);
}