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

  • 46
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

方法

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

  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

参照