質問編集履歴

1 画像を修正いたしました。お知らせいただいた方ありがとうございます。

YakinikuOnFire

YakinikuOnFire score 44

2019/04/14 14:36  投稿

GoogleAppsScriptでCSVをダウンロードするコードをカスタマイズしたい
### 前提・実現したいこと
GoogleスプレッドシートでCSVをダウンロードするスクリプトをカスタマイズしたいと思っております。
拾ってきたコードをいじっているのですが、うまくいかず困っております。ご協力いただけたら幸いです。
### 発生している問題・エラーメッセージ
```
2点変更したい部分がありましたが、1つは自己解決しております。
1.書き出すシートを「csv」シートに固定したい(解決済)
左から2番目のシートを書き出すことで自己解決しました。(gsコード内の変更点1と2)
2.空欄のセルまで書き出されるのを防ぎたい
![イメージ](387e912b1e40ad577aa1cb98d492ddeb.png)
データが入っている分だけ書き出したいのですが、現状はデータが入っていない部分まで書き出されてしまいます。画像のようにCSVでダウンロードしたいシートにはデータがAの1行目からASの○○行までデータが入っています。○○行は変化するのでこのあたりをどのように組んでいったらいいのか見当がつかず困っています。
データが入っている分だけ書き出したいのですが、現状はデータが入っていない部分まで書き出されてしまいます。
下記画像のようにCSVでダウンロードしたいシートにはデータがAの1行目からASの○○行までデータが入っています。○○行は変化するのでこのあたりをどのように組んでいったらいいのか見当がつかず困っています。
```
**以下CSVシートの画像**  
![CSVシートの画像](e00bcbf5d9132de593ed2af786b0a441.png)  
### 該当のソースコード
拾ってきたコードに変更を入れているのでちぐはぐな部分があるかと思います。
```gs
// メニューバーにカスタムメニューを追加
function onOpen() {
 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 var entries = [{
   name : "CSVで出力",
   functionName : "csvDownload"
 }];
 spreadsheet.addMenu("CSV", 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 sheetActive = SpreadsheetApp.getActiveSpreadsheet();//変更点1
 var sheet = sheetActive.getSheets()[1];//変更点2
 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 を想定
}
// JS側で使用
// ファイル名の設定はここで!!
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';
}
```
```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>
```
### 補足情報(FW/ツールのバージョンなど)
https://qiita.com/ayies128/items/315f161bc14c36327fcd
こちらのサイトのコードを使わせていただいております。
よろしくお願いします。
  • JavaScript

    22218 questions

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

  • Google Apps Script

    1490 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る