#やりたいこと
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を生成して配列に追加します。
連想配列sheetID
のkey
がシート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