2015年11月2日月曜日

Google Spreadsheet - 数式の一括出力


var shell = SheetUtil.Shell.attach("Sheet01");
var join = function(x){ return x.join("\n"); };
var source = shell.sheet.getDataRange().getFormulas().map(join).join("====\n"); 

Logger.log(source);

// テーブルが多い時は、ドライブに保存する
// DriveApp.createFile("dump.txt", source);


数式の一括出力…と、SheetUtil.Shell で提供されてない API を使う時のサンプル。
.sheet プロパティが Sheetオブジェクトを保持しています。

オブジェクトが持つプロパティは Shell.gs の行頭の関数内で確認出来ます。(http://bit.ly/SheetUtil)
[リソース][ライブラリ] から、ライブラリ名をクリックするとドキュメントを表示する機能がありますが、
ドキュメントはまだ書いてません。(TODO)

SheetUtil での Spreadsheet/Sheetオブジェクトのキャッシュ化

ついでに、SheetUtilの仕様の説明

SheetUtil.Shell.attach は、ライブラリ内でキャッシュを持ちます。
2回目以降の同じ名前のシートを呼び出す時、API 呼び出しは発生しません。
SheetUtil.Pipe も同様、キャッシュを共有してます。

キャッシュ化の反作用として、オブジェクトを長期間保持することになる為、
長時間実行されるプログラムでは、その間リソースが開放されないといった面もありますが、
Google App Script として実行する限りでは、実行時間が短いので、顕在化する問題ではありません。

※ キャッシュから解放する dettach メソッドも用意しました。
通常は自動的に開放されるので、明示的な dettach は不要です。

  // var ss = SpreadsheetApp.getActiveShreadsheet();
  // var sheet = ss.getSheetByName("Sheet01");

  var sheet = SheetUtil.getSheet("Sheet01");

ShellやPipeを必要としない、従来のSheetオブジェクトが必要な場合でも、
SheetUtilの提供する関数を使う事で、キャッシュ化の恩恵を得られます。

0 件のコメント:

コメントを投稿