GASでCSV自在に操る
CSV操作の基礎
Google Apps Script(GAS)を使ったCSV操作は、データのインポート・エクスポートを簡単に行える強力な手段です。まずは、スプレッドシートからCSV文字列を取得し、逆にCSV文字列をスプレッドシートに書き込む基本的な流れを理解しましょう。
スプレッドシートのデータをCSV文字列に変換するには、SpreadsheetApp.getActiveSpreadsheet()で取得したシートをgetDataRange().getValues()で二次元配列にし、Utilities.formatString()やArray.map()でカンマ区切りに整形します。逆にCSV文字列を配列に戻す際は、Utilities.parseCsv()を活用します。
Utilities.parseCsvでCSV解析
CSV解析の核心はUtilities.parseCsv()です。このメソッドは、文字列を行ごとに分割し、各行をカンマで区切った配列に変換します。エスケープ文字やダブルクオートで囲まれたフィールドも正しく処理されるため、複雑なCSVファイルでも安心です。
var csvText = "名前,年齢,職業\n山田太郎,35,エンジニア\n佐藤花子,28,デザイナー";
var data = Utilities.parseCsv(csvText);
// data は [[ "名前", "年齢", "職業" ], [ "山田太郎", "35", "エンジニア" ], ...]
取得した二次元配列は、スプレッドシートへの書き込みやデータベースへの保存など、さまざまな用途に再利用できます。
配列変換とCSV出力
配列変換はCSV操作の重要なステップです。スプレッドシートから取得した二次元配列をCSV文字列に変換する際は、Array.map()とArray.join()を組み合わせて行います。以下の例では、配列をカンマ区切りの文字列に変換し、改行で行を区切っています。
var sheet = SpreadsheetApp.getActiveSheet();
var values = sheet.getDataRange().getValues();
var csv = values.map(function(row) {
return row.map(function(cell) {
return '"' + cell.toString().replace(/"/g, '""') + '"';
}).join(',');
}).join('\n');
// csv は CSV 形式の文字列
このCSV文字列をDriveApp.createFile()でファイルに保存すれば、エクスポートが完了します。逆に、外部から取得したCSVファイルを読み込む場合は、DriveApp.getFileById()で取得し、Utilities.parseCsv()で解析します。
インポート・エクスポートとデータ移行
データ移行プロジェクトでは、インポートとエクスポートの自動化が鍵となります。GAS で定期的にCSVを取得し、スプレッドシートに書き込むスクリプトを作成すれば、手作業を大幅に削減できます。例えば、外部 API から JSON を取得し、CSV へ変換して Drive に保存するワークフローを構築できます。
また、SpreadsheetApp.flush()で書き込みを確定させ、Utilities.sleep()で API 呼び出しのレート制限を回避するテクニックも併用すると、安定したデータ移行が実現します。最終的に、エクスポートした CSV を別システムへインポートする際は、同じく Utilities.parseCsv() を使って整形し、必要に応じて Join で文字列結合を行います。
コメント
コメントを投稿