LoginSignup
7
11

More than 5 years have passed since last update.

Google Spreadsheetで各シートをCSVとしてダウンロードするためのリンクを表示する。

Last updated at Posted at 2018-05-25

やりたいこと

Google Spreadsheetの複数シートをCSVとしてダウンロードする作業があります。
file > Download as > Comma-separated values(.csv, current sheet)を各シートでやるのは大変なので、簡略化したい。

下記の記事を参考に作成しました。

差分としては、下記二点です。

  • ダウンロード形式がxlsxではなく、csvファイルである。
  • 上記に付随して、各シートごとのリンクを生成する必要がある。

完成したコード

//カスタムメニューを作成する。
function onOpen(e) {
  SpreadsheetApp.getUi()
      .createMenu('Custom')
      .addItem('Download as CSV', 'downloadCSV_GUI')
      .addToUi();
}

//ダウンロード用のURLを生成する。
function downloadCSV_GUI() {
  const ssID = SpreadsheetApp.getActive().getId();
  const URL = 'https://docs.google.com/spreadsheets/d/'+ssID+'/export?format=csv&gid=';
  const sheetID = {
    シート1のID:'(シート1の名前)',
    シート2のID:'(シート2の名前)'
  };

  //空の配列を作成する。
  var htmlObject = [];

  //対象シートの数だけ、配列にHTML(リンク)を追加する。
  for(key in sheetID)
  {
    htmlObject.push('<br><a href="'+URL+key+'">'+sheetID[key]+'</a>');
  }

  // ダウンロード用URLを表示したモーダル画面の表示
  var htmlOutput = HtmlService
                  .createHtmlOutput(htmlObject)
                  .setSandboxMode(HtmlService.SandboxMode.IFRAME)
                  .setWidth(400)
                  .setHeight(180);
  SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Click to Download');
}

コードの説明

//カスタムメニューを作成する。
function onOpen(e) {
  SpreadsheetApp.getUi()
      .createMenu('Custom')
      .addItem('Download as CSV', 'downloadCSV_GUI')
      .addToUi();
}

ダウンロード用のURLを表示するため、メニューに項目を追加します。

//ダウンロード用のURLを生成する。
function downloadCSV_GUI() {
  const ssID = SpreadsheetApp.getActive().getId();
  const URL = 'https://docs.google.com/spreadsheets/d/'+ssID+'/export?format=csv&gid=';

ダウンロード用のURLはhttps://docs.google.com/spreadsheets/d/(スプレッドシートID)/export?(オプション)という形で指定することができるようです。
下記にまとまっています。

今回はCSVでダウンロードするので、format=csvとして、各シートをシートIDgid=で指定します。
シートIDは該当のシートを表示したときのURLで確認可能です。

  const sheetID = {
    シート1のID:'(シート1の名前)',
    シート2のID:'(シート2の名前)'
  };

ダウンロード用リンクの表示名称をシート名にしたいので、連想配列で紐づけて格納しておきます。

  //空の配列を作成する。
  var htmlObject = [];

  //対象シートの数だけ、配列にHTML(リンク)を追加する。
  for(key in sheetID)
  {
    htmlObject.push('<br><a href="'+URL+key+'">'+sheetID[key]+'</a>');
  }

表示したいURLのリストは配列として持っておきます。
空の配列を作成してから、シートの数だけURLを生成して配列に追加します。

連想配列sheetIDkeyがシートIDになっているため、それをURLの末尾に付与します。
<a>タグのテキストはIDに紐づくシート名なので、sheetID[key]で取り出します。

  // ダウンロード用URLを表示したモーダル画面の表示
  var htmlOutput = HtmlService
                  .createHtmlOutput(htmlObject)
                  .setSandboxMode(HtmlService.SandboxMode.IFRAME)
                  .setWidth(400)
                  .setHeight(180);
  SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Click to Download');
}

カスタムメニューをクリックすると、モーダルウィンドウが表示されます。
リンクをクリックすれば各シートがCSVとしてダウンロード可能です。

参考URL

7
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
11