質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

3366閲覧

GASでスプレッドシートの内容をローカルへCSV出力→文字化け

whitedoragon

総合スコア12

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/05/16 12:07

編集2018/05/16 12:13

GASでスプレッドシートの内容を、ローカル上へCSV出力したく
別サイト参照・それを基にコード作成させていただきました。

作成したコードにて、出力されたCSVをメモで開くと一見正常にカンマ区切りで
出力されたように見えるのですが、エクセルで開くと文字化けが起こります。

他のデータベースに読み込んでも、文字化けされた状態で読み込まれます。

おそらく出力の際に文字コードを指定(Shift_JIS)にするのかと思うのですが
どのように組み込んだらよいかわからなくて質問させていただきました。

ご教示いただけますと助かります。

宜しくお願いします。

【function.gs】

// メニューバーにカスタムメニューを追加 function onOpen() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var entries = [{ name : "CSVで出力", functionName : "csvDownload" }]; spreadsheet.addMenu("その他", entries); }; // JSを用いてCSVファイルをダウンロードする function csvDownload() { // dialog.html をもとにHTMLファイルを生成 // evaluate() は dialog.html 内の GAS を実行するため( <?= => の箇所) var html = HtmlService.createTemplateFromFile("dialog").evaluate(); // 上記HTMLファイルをダイアログ出力 SpreadsheetApp.getUi().showModalDialog(html, "ダウンロード中"); } // JS側で使用 function getData() { // スプレッドシート上の値を二次元配列の形で取得 var sheet = SpreadsheetApp.getActiveSheet(); var values = sheet.getDataRange().getValues(); // 二次元配列をCSV形式のテキストデータに変換 var dataArray = []; for (var i = 0; i < values.length; i++) { dataArray.push(values[i].join(",")); } return dataArray.join("\r\n"); // 改行コードは windows を想定 } function getFileName() { var spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadSheet.getActiveSheet(); var now = new Date(); var datetime = Utilities.formatDate( now, 'Asia/Tokyo', 'yyyyMMddHHmm'); return sheet.getName() + '_' + datetime + '.csv'; }

【dialog.html】

<!DOCTYPE html> <html> <head> <base target="_top"> <script type='text/javascript'> window.onload = function(){ handleDownload(); } function handleDownload() { // 出力データを GAS から取得する var content = <?= getData(); ?>; var blob = new Blob([ content ], { "type" : "text/csv"}); var link = document.createElement('a'); // ファイル名を GAS から取得する link.download = <?= getFileName(); ?>; link.href = window.URL.createObjectURL(blob); link.click(); // ダイアログを閉じる google.script.host.close(); } </script> </head> </html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

whitedoragon

2018/05/16 12:59

ご回答いただきましたサイトを参照させていただきました。 コード内に var bom = new Uint8Array([0xEF, 0xBB, 0xBF]); を追加して var blob = new Blob([bom, content ], { "type" : "text/csv"}); に変更しましたら文字化けせずに出力することができました。 このたびはありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問