方法
以下の処理により文字コード指定してファイルを書き出すことが可能になる。
- 空のBlobを生成
- Blobに書き出したい文字列と文字コードをセット
- Blobをファイルに書き出し
コードで表すと以下のとおり
var blob = Utilities.newBlob("", contentType, fileName);
blob.setDataFromString(string, charSet);
DocsList.createFile(blob);
解説
GASから任意の文字列をテキストファイルとして書き出すにはDocsList.createFile(string, contentType)
により可能だが、文字コードを指定して書き出すことはできない。そこで、文字コード指定のできるBlob生成をしてからDocsList.createFile(Blob)
することで、指定した文字コードでファイルを書き出してやる。
またBlobについて、新しくBlobを生成する時に文字コード指定ができないので、いったん空でBlobを生成したのちにBlob.setDataFromString(string, charset)
で文字コードを渡してあげる必要がある。
以上を合わせると上に示したような処理になる。
サンプル
開いているシートをShift_JISなcsvとして書き出す。
code.gs
function outputSheetToCsvFile() {
// 定数
var fileName = "μ's.csv";
var contentType = "text/csv";
var charSet = "Shift_JIS";
var lineDelimiter = ",";
var newLineChar = "\r\n";
// 開いているシートからデータを取得
var range = SpreadsheetApp.getActiveSheet().getDataRange();
var values = range.getValues();
// 2次元配列になっているデータをcsvのstringに変換
var csvString = underscoreGS._map(
values,
function(row){return row.join(lineDelimiter);}
).join(newLineChar);
// Shift_JISなBlobに変換
var blob = Utilities.newBlob("", contentType, fileName).setDataFromString(csvString, charSet);
// Blobをファイルに出力
DocsList.createFile(blob);
}
function onOpen() {
// メニューバーにカスタムメニューを追加
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "シートをCSV(Shift_JIS)で出力",
functionName : "outputSheetToCsvFile"
}];
spreadsheet.addMenu("CUSTOM MENU", entries);
};
実行結果
これが
↓↓↓こうなる↓↓↓