GASでスプレッドシートからCSVを出力する方法【初心者向け解説】
お仕事
まいまい
こんにちは! 前回のブログでは、Google Apps Script(GAS)を使ってGoogleスプレッドシートに「オリジナルメニューを追加する方法」を紹介しました。
今回はその続編として、スプレッドシートのデータをCSVとして出力する方法 をご紹介します。業務でのデータ整理や、外部システムへの取り込みなど、CSV出力は実際の現場でもよく使う便利機能です。
今回やること
✅ スプレッドシートのデータを取得
✅ 条件ごとに「winners」「losers」に分ける
✅ CSV形式に変換
✅ ダウンロードできるようにする
最終的には、メニューから「CSV出力」をクリックすると、自動でCSVファイルが作成されてダウンロードできるようになります。
※ヘッダーが1行目の設定ではありませんので実装の際はご注意ください
まずはメニューにCSV出力機能を追加する
前回と同じように、メニューを追加してそこから関数を呼び出せるようにします。
function onOpen() {
const ui = SpreadsheetApp.getUi();
const menu = ui.createMenu("CSV出力");
menu
.addItem("勝者データを出力", "csvDownloadWinners")
.addItem("敗者データを出力", "csvDownloadLosers")
.addToUi();
}
これで、スプレッドシートを開くとメニューに「CSV出力」が追加され、クリックすると処理が動くようになります。
※ここがよくわからない人は前回のブログ「GASでスプレッドシートに階層メニューを追加する方法」を見てみてください
CSV出力のメイン処理
function showDownloadDialog(type) {
var html = HtmlService.createTemplateFromFile("dialog");
html.type = type; // "winners" or "losers"
SpreadsheetApp.getUi().showModalDialog(html.evaluate(), "CSVをダウンロード");
}
function csvDownloadWinners() {
showDownloadDialog("winners");
}
function csvDownloadLosers() {
showDownloadDialog("losers");
}
ここで「勝者」「敗者」を選択できるようにし、ダイアログを表示します。
CSVデータを生成する部分
function getData(type) {
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getDisplayValues();
// 2行目をヘッダーに利用
const header = data[1];
const result = [header];
// 3行目以降をデータとして取得
for (let i = 2; i < data.length; i++) {
const row = data[i];
const isWinner = row[19] && row[19].toString().trim() !== "";
if ((type === "winners" && isWinner) ||
(type === "losers" && !isWinner)) {
result.push(row);
}
}
// CSV形式に変換
const csvString = result
.map(r => r.map(field =>
`"${(field ?? "").toString().replace(/"/g, '""')}"`
).join(","))
.join("\r\n");
// Excelで文字化け防止するためBOMを追加
const bom = "\uFEFF";
return bom + csvString;
}
ここでは 「勝者」「敗者」判定は「20列目(インデックス19)」のセルに値があるかどうかで判断しています。
自分のシートに合わせて条件を調整してください。
ファイル名を動的に付ける
保存時に「いつのデータか」が分かるように、タイムスタンプ付きのファイル名をつけます。
function getFileName(type) {
const now = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyyMMdd_HHmmss");
if (type === "winners") {
return `winners_${now}.csv`;
} else {
return `losers_${now}.csv`;
}
}
ダウンロード用HTMLファイル
最後に、HTMLを使って実際にダウンロードさせる仕組みを作ります。
dialog.html という名前でプロジェクトに追加してください。
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>
window.onload = function() {
const type = "<?= type ?>"; // winners or losers
google.script.run
.withSuccessHandler(function(content) {
google.script.run.withSuccessHandler(function(filename) {
const blob = new Blob([content], { type: "text/csv" });
const link = document.createElement('a');
link.download = filename;
link.href = URL.createObjectURL(blob);
link.click();
google.script.host.close();
}).getFileName(type);
})
.getData(type);
};
</script>
</head>
<body>
CSVを生成しています...
</body>
</html>
これで、CSVファイルが自動的にダウンロードされるようになります。
関数ごとのちょこっとポイント解説
showDownloadDialog(type)
→ CSVダウンロード用のモーダルを呼び出す関数。type が “winners” か “losers” で切り替わります。
csvDownloadWinners() / csvDownloadLosers()
→ 「勝者」「敗者」用にそれぞれ呼び出せるショートカット関数。メニューから実行させると便利。
getData(type)
→ スプレッドシートのデータを読み込み、条件に合う行だけを抽出。Excel対応のBOM付きUTF-8でCSVを生成しているので文字化けしにくいのがポイント。
getFileName(type)
→ ダウンロードするファイル名を、実行時の日時付きで自動生成。winners_20250903_153000.csv のようにユニークになります。
HTML部分
→ GASで生成したCSVを一時的にBlob化し、自動でダウンロード開始。処理が終わればダイアログも自動で閉じます。
まとめ
GASでスプレッドシートに「CSV出力」メニューを追加できる
getData()でデータをCSV形式に変換し、ダイアログからダウンロードできる
ファイル名にタイムスタンプをつけると便利
CSV出力機能は、一度仕組みを作ってしまえば日常業務がとてもスムーズになります。自分だけでなくチーム全体の効率化にもつながるので、ぜひ実践してみてください。
ちょっとした工夫で仕事がぐっと楽になるのが、GASの大きな魅力ですね🌟