前提・実現したいこと
Googleスプレッドシートの内容をCSV形式で、直接ローカルにダウンロードするスクリプトを書こうとして、
下記の方法を試しました。
https://qiita.com/ayies128/items/315f161bc14c36327fcd
これはこれでうまく行くのですが、文字コードがUTF-8になってしまうので、
Shift_JISにする方法を探しています。
詳しい方、ご教授いただけると助かります。
発生している問題・エラーメッセージ
文字コードの変換はBlobオブジェクトを使い、SetDataFromString()を使ってできるようなのですが、
BlobをGoogle Drive上のファイルとして保存することはできるものの、直接ローカルにダウンロード
しようとすると、うまくShift_JISに変換できません。
該当のソースコード
GoogleAppsScript
1function exportAsCSV() { 2 3 // dialog.html をもとにHTMLファイルを生成 4 // evaluate() は dialog.html 内の GAS を実行するため( <?= => の箇所) 5 var html = HtmlService.createTemplateFromFile("dialog").evaluate(); 6 7 // 上記HTMLファイルをダイアログ出力 8 SpreadsheetApp.getUi().showModalDialog(html, "ファイルダウンロード"); 9} 10 11function getData() { 12 13 // スプレッドシート上の値を二次元配列の形で取得 14 var sheet = SpreadsheetApp.getActiveSheet(); 15 var values = sheet.getDataRange().getValues(); 16 17 // 二次元配列をCSV形式のテキストデータに変換 18 var dataArray = []; 19 for (var i = 0; i < values.length; i++) { 20 dataArray.push(values[i].join(",")); 21 } 22 var dataStr = dataArray.join("\r\n"); // 改行コードは windows を想定 23 24 // Shift_JISなBlobに変換 25 var blob = Utilities.newBlob("", "text/csv", "temp").setDataFromString(dataStr,"Shift_JIS") 26 27 return blob.getDataAsString("Shift_JIS"); //stringにするとUTF-8になってしまうようだ? 28 29 //DriveApp.createFile(blob); //これはちゃんとShift_JISのまま保存される 30 31} 32 33// ファイル名の設定 34function getFileName() { 35 var sss = SpreadsheetApp.getActiveSpreadsheet(); 36 var now = new Date(); 37 var datetime = Utilities.formatDate( now, 'Asia/Tokyo', 'yyyyMMddHHmm'); 38 // スプレッドシート名+プラン名 39 return sss.getName() + '_' + sss.getRangeByName("planName").getValue() + '.csv'; 40} 41
HTML
1 <!-- dialog.html こちらは参考にしたコードそのままです。--> 2<!DOCTYPE html> 3<html> 4 <head> 5 <base target="_top"> 6 <script type='text/javascript'> 7 window.onload = function(){ 8 handleDownload(); 9 } 10 function handleDownload() { 11 // 出力データを GAS から取得する 12 var content = <?= getData(); ?>; 13 var blob = new Blob([ content ], { "type" : "text/csv"}); 14 var link = document.createElement('a'); 15 // ファイル名を GAS から取得する 16 link.download = <?= getFileName(); ?>; 17 link.href = window.URL.createObjectURL(blob); 18 link.click(); 19 // ダイアログを閉じる 20 google.script.host.close(); 21 } 22 </script> 23 </head> 24</html>
試したこと
getDataAsString()で引数なし、"ascii"、"UTF-8"など試しましたがうまく行きませんでした。
getDataAsString()のかわりにgetBytes()を使うと、10進数でデータをダンプしたような文字列がダウンロードされてしまいます。
補足情報(FW/ツールのバージョンなど)
Windows 7 Professional 64bit/Chrome 73.0.3683.75(Official Build) (64 ビット)

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/19 03:22
2019/03/19 05:08 編集