![見出し画像](https://assets.st-note.com/production/uploads/images/114522508/rectangle_large_type_2_d0c879e55b335462feca5f9bc9d5889d.png?width=1200)
CSVファイルを、GASを使って一括でスプシ書き込む|make活用
CSVファイルをGoogle Spleadsheetなどで取り扱おうとした場合、インポート機能を使えば取り込むことができますよね!
ただし、iPaaSツールなどを使って取り込む場合には少し工夫が必要です。
まともにやろうとすると、コストが膨大になってしまうこともあるので、ぜひ試してみてください。
CSVファイルをスプレッドシートへそのまま書き込んでみる
サンプルファイルをChatGPT先輩に作っていただきました。
こういうサンプルデータを用意する時にも活用できてめちゃ便利ですね。
![](https://assets.st-note.com/img/1693121360764-AOQDPKvpGt.png?width=1200)
ついでにCode Interpreterを使って、CSVファイルとして保存してもらいました。
![](https://assets.st-note.com/img/1693121446356-DavVt3t7e4.png?width=1200)
Google DriveにCSVファイルを置いて、スプレッドシートへ突っ込んでみる。
GoogleDriveからCSVファイルを落として、スプレッドシートのA1のセルへ突っ込んでみましょう。
![](https://assets.st-note.com/img/1693121507403-GrRJdkt5y5.png?width=1200)
当たり前ですが、A1のセルに全てのデータが入ってしまいました。
![](https://assets.st-note.com/img/1693121557446-dqA7WKXOWG.png?width=1200)
CSVファイルを改行ごとに分解し、1行ずつ書き込む
正攻法としては、CSVファイルを改行ごとに分解し、1行ずつスプレッドシートに書き込む方法があります。
![](https://assets.st-note.com/img/1693121876579-4E9KfkfOXF.png?width=1200)
CSVファイルを分解し(今回のファイルであれば30行分あるので30行に分解)、1行ずつ書き込むのを30回繰り返す仕様になっています。
結果としては成功ですね!
しっかりと1行、1列ずつにデータが格納されています。
![](https://assets.st-note.com/img/1693121990085-2ZdXVBS2Il.png?width=1200)
ただ、一つ問題があります。
makeのオペレーション数が、CSVファイルの行数に依存してしまうことです。
今回であれば、書き込む作業だけで31オペレーションを使ってしまっています。
まだ30ほどであれば可愛らしいものですが、10000行あるCSVファイルとかだと毎日使うにしては高いですよね。
![](https://assets.st-note.com/img/1693122069620-fmOLdfi157.png?width=1200)
GASを使って分解する
今日の本題はこっちです!
使用するシナリオはこちら。
![](https://assets.st-note.com/img/1693122260250-KIuPlTiUjr.png?width=1200)
そうです。最初と一緒です。
遠回りさせてごめんなさい。
ChatGPTにスクリプトを書いてもらう
プロンプトはシンプルにこんな感じ。
![](https://assets.st-note.com/img/1693122621531-8hmnf2H3cr.png?width=1200)
function parseCsvInA1() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// A1セルの内容を取得
var csvData = sheet.getRange("A1").getValue();
// CSVデータを行に分割
var rows = csvData.split("\n");
// 各行を列に分割して2次元配列を作成
var data = [];
for (var i = 0; i < rows.length; i++) {
data.push(rows[i].split(","));
}
// 2次元配列のデータをシートに書き込む
sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
}
GASにスクリプトを貼り付ける
![](https://assets.st-note.com/img/1693122673111-ytUqnysRO3.png?width=1200)
トリガーを設定
![](https://assets.st-note.com/img/1693122716078-K8CO5z8ia1.png?width=1200)
※詳細の進め方についてつまづくことがあれば、こちらの記事を参照してください。
シナリオを実行してみる
GIFで実際の動きをご覧ください。
![](https://assets.st-note.com/production/uploads/images/114522036/picture_pc_57bb73e70e1733b7ad7f3d09e8716bae.gif?width=1200)
一瞬、A1のセルに全てのデータが入りますが、その後、分解されて各行列に書き込まれているのがわかります。(無編集です)
スクリプトの解説
関数の定義:
function parseCsvInA1() {
`parseCsvInA1`という名前の関数を定義しています。
アクティブなシートの取得:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
Google Apps Scriptの`SpreadsheetApp`クラスを使用して、現在アクティブなスプレッドシートのアクティブなシートを取得しています。
A1セルの内容の取得:
var csvData = sheet.getRange("A1").getValue();
A1セルの内容(ここではCSVデータと想定)を取得しています。
CSVデータを行に分割:
var rows = csvData.split("\n");
取得したCSVデータを、改行コード(`\n`)で分割して、各行を要素とする配列`rows`を作成しています。
各行を列に分割して2次元配列を作成:
var data = [];
for (var i = 0; i < rows.length; i++) {
data.push(rows[i].split(","));
}
`rows`配列の各行をカンマ(`,`)で分割して、2次元配列`data`を作成しています。これにより、CSVの各セルのデータが`data`の各要素として格納されます。
2次元配列のデータをシートに書き込む:
sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
2次元配列`data`の内容を、Google スプレッドシートの適切なセル範囲に書き込んでいます。`getRange`メソッドは、開始行、開始列、行数、列数を引数として取り、指定された範囲のセルを返します。`setValues`メソッドは、その範囲のセルに2次元配列の内容を書き込みます。
GASを使った記事はこちら
この記事が気に入ったらサポートをしてみませんか?