下記の記事にて、スプレッドシートの特定シートをCSVファイルにする方法を紹介しました。
【GAS】スプレッドシートの特定シートからCSVファイルを作成・保存するGASでスプレッドシートからCSVファイルを作成します。CSVの保存先は「フォルダIDを指定して保存する方法」「スプレッドシートと同じフォルダに保存する方法」の2つを紹介しています。...
今回の記事では、1つのスプレッドシートに複数シートがある前提で、スプレッドシート内の各シートをCSVファイルにし、ZIPにしてドライブに保存する方法を紹介します。
ノンプロ研の中級GAS講座の課題です。あっ、初心者講座もあるようですよ。
スポンサーリンク
各シートからCSVファイルを作成しZIPにする
スプレッドシート内の特定シートをCSVファイルにする方法はこちらの記事を参照→【GAS】スプレッドシートの特定シートからCSVファイルを作成・保存する
今回のポイントはzipメソッドです。
Utilitiesクラス.zipメソッド(blobs, name)
- パラメータ:blobs(BlobSource[]) ,name(String)
- 戻り値:Blobオブジェクト
- 説明:受け取ったBlobのデータから、zipファイル(新しいBlobオブジェクト)を作成します。
- 公式リファレンスはこちら
スクリプトまとめ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
function convertSheetsToCSVandZIP() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheets = ss.getSheets(); //Blobオブジェクトを格納する配列を用意 let blobs = []; for (let i = 0; i < sheets.length; i++) { //CSV名はシート名とする let sheetName = sheets[i].getSheetName(); //データ範囲を二次元配列で取得し、カンマ区切りの文字列にする let values = sheets[i].getDataRange().getValues(); let csv = values.join('\n'); //Blobオブジェクトを作成して配列に格納 let blob = Utilities.newBlob(csv, MimeType.CSV, sheetName + '.csv'); blobs.push(blob); } //zip名はスプレッドシート名とする const zipName = ss.getName(); /* zipメソッド:Blobオブジェクトの配列 blobs を指定のファイル名で圧縮 戻り値:Blobオブジェクト */ const zip = Utilities.zip(blobs, zipName + '.zip'); //ドライブに保存する const id = '********************'; //フォルダID const folder = DriveApp.getFolderById(id); folder.createFile(zip); } |
処理の流れ
上記のスクリプトで実行してる処理の流れ(イメージ)です。コードと併せてご覧ください。
このスクリプトのポイントは、最後のcreateFileメソッドでzipファイルを作成するまでは、csvファイルの実態が目に見えないことです。Blobオブジェクト、面白いですね。
スポンサーリンク
スポンサーリンク