Googleドライブの特定のフォルダに定期的にCSVを格納し、最新ファイルのデータのみをスプレッドシートに取得して、何らかの自動処理を行いたい、というシーンは少なくありません。
CSVの値を手動でスプレッドシートにコピペすることと処理内容は変わりませんが、GAS(Google Apps Script)で自動化することでその後の処理の自動化や、余計な工数や工程を考慮せずに自動化を設計することが可能になります。要は、このスクリプトのみを単体で使用することはほとんどありませんが、その後の自動化に繋げるための準備用スクリプトという位置づけになります。
今回ご紹介する私が作成したサンプルコードの主な仕様は以下の通りです。
<サンプルコードの仕様>
・"フォルダのID"を所定のGoogleドライブフォルダのIDに置き換えてください。
・スプレッドシートにGASをセットした後、対象のフォルダにCSVをアップロードすると(かつ所定の時間にトリガーが実行されると)、CSVの内容がそのままスプレッドシートに転記されます。
・アップロードされたファイルがCSVの場合のみ転記が実行されます。
・一度処理が実行されたCSVのファイル名の頭には __ が付与され、次回以降は処理対象外となります。
サンプルコードをカスタマイズすればかなり便利にご利用いただけるかと思いますので、ぜひ、ご自由にお使いください!
※ご質問にはお答えできませんので予めご承知おきくださいませ。
コード
function importCsv() {
const folder = DriveApp.getFolderById("フォルダーのID");
// フォルダ内のファイル名を配列化
const files = folder.getFiles();
let fileNames = [];
while (files.hasNext()) {
fileNames.push(files.next().getName());
}
fileNames.sort();
// ファイル名の頭文字が__から始まっていないファイルのみ処理
fileNames.forEach((fileName) => {
if (!fileName.startsWith("__")) {
const file = folder.getFilesByName(fileName).next();
// ファイルがCSVの場合のみ処理
if (file.getMimeType() === MimeType.CSV) {
let csvData = Utilities.parseCsv(file.getBlob().getDataAsString("MS932"));
csvSheet.clear();
csvSheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
file.setName("__" + fileName);
}
}
});
}
トリガー設定
対象関数:importCsv
「時間手動型」で任意の時間間隔で処理が実行されるよう設定してください。
※APIリクエスト上限値内の実行頻度に収まるようにご注意ください。