GASで文字コード指定してファイルを書き出す

More than 3 years have passed since last update.


方法

以下の処理により文字コード指定してファイルを書き出すことが可能になる。


  1. 空のBlobを生成

  2. Blobに書き出したい文字列と文字コードをセット

  3. 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);
};



実行結果

これが

スプレッドシート

↓↓↓こうなる↓↓↓

csv


参照