GASが初心者のため、分からず悩んでおります。
申し訳ありませんが、教えていただきたいです。
前提・実現したいこと
①共有のGoogleドライブのフォルダに毎日保存される大量のcsvデータを
月ごとの一つのcsvデータにしたいです。
②毎日保存される大量のcsvデータを削除したいです。
③その後、月ごとにまとめられたcsvデータを特定のスプレッドシートに張り付けたいです。
今現状、手作業で①、②、③を行っており、工数が増えております。
毎日保存される大量のcsvデータの詳細
[大量のcsvデータの保管場所]
共有ドライブ>データ保管場所>データ登録
[大量のcsvデータのドキュメント名]
パターンが2つありました。
①20200423_テスト1Record1.csv1の1部分は、連番になっております。
↑ここが日付になり、日々変わっていきます。
Record
②20200423_テスト1Record.csv
番号が入っていない場合もあります。
1回のスクリプトで対応できる方法はありますでしょうか。
月ごとにまとめられたcsvデータの詳細
[月ごとにまとめられたcsvデータの保管場所]
共有ドライブ>データ保管場所>テスト1のアーカイブ
[月ごとにまとめられたcsvデータのドキュメント名]
202004月_テスト1Record.csv
↑ここが月になります。
できないこと
・以下のソースコード記載時①→③で考えていたが、①のデータ量が膨大のため、
①→②を挟む必要があり、①→②コードの書き方がわかりません。
・①のドキュメント名が日々変更されるため、曖昧検索で【_テスト1Record.csv】に一致するものの指定方法を教えていただきたいです。
該当のソースコード
ネットで検索してソースコードを持ってきました。
var ss = SpreadsheetApp.getActiveSpreadsheet(); var sh = ss.getActiveSheet(); function test() { // 対象のCSVファイルが置かれているフォルダ名、ファイル名を定義 const sheet = SpreadsheetApp.getActiveSheet(); const csvFolderName = "test"; const fileName = /20200316_テスト1Record_1.csv/; //20200316_テスト1Record_1 const rootFolderId = "フォルダid"; // ルートフォルダのID(test)、マイドライブは"root" const root = DriveApp.getFolderById(rootFolderId); var rootFolders = root.getFolders(); while(rootFolders.hasNext()) { var folder = rootFolders.next(); if(folder.getName() === csvFolderName) { // 直下のファイル取り込みを実施 importCSV(folder); } else { // 直下のフォルダにcsvがあるか調べる var csvFolder = folder.getFoldersByName(csvFolderName); while(csvFolder.hasNext()) { // 直下のファイル取り込みを実施 importCSV(csvFolder.next()); } } } function importCSV(folder) { var files = folder.getFiles(); while(files.hasNext()) { var file = files.next(); if (file.getName().match(fileName)) { // 取り込み処理を実施 var data = file.getBlob().getDataAsString("UTF-8"); var csv = Utilities.parseCsv(data); var ALastRow = sheet.getLastRow(); //CSV書き込み sheet.getRange(ALastRow + 1,1,csv.length,csv[0].length).setValues(csv); } } } }
回答1件
あなたの回答
tips
プレビュー