@gray (山田 ゆう)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

GASによる複数CSVファイルのスプレッドシートへのインポート方法

解決したいこと

指定フォルダにある複数のCSVファイルを既存のスプレッドシートの別シートにわけてインポートする処理を自動化したく、GASで作成しています。

Aフォルダ下のすべてのファイルを読み取り
スプレッドシートの別シートに分けてインポートしたい

Aフォルダ:ファイル名:AA.csv、BB.csv、CC.csv
既存のスプレッドシートの各シート名をファイル名の:AA、BB、CCとしたい

ファイル名を記述してインポートするところまではこちらを参考にしましたが、すべてのファイルを読み取る処理がわかりません。
参考となる記事でもかまいませんのでご教授いただけませんか

自分で試したこと

function importCSVFromGoogleDrive() {
// csvファイル読みこみ
var file = DriveApp.getFilesByName("aa.csv").next();
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);

0 likes

2Answer

まずqiitaでプログラムを貼るときは、

(空行)
```拡張子か言語名
プログラム
```

と書いてください。おそらくgasはqiitaで対応していないので、「.js」とするといいです。(GASはjavascriptが元なので)

貼ってあるプログラムの各行の説明は以下の通りです。

.js
//関数の定義
function importCSVFromGoogleDrive() {
// csvファイル読みこみ
var file = DriveApp.getFilesByName("aa.csv").next();
// csvファイルの中身を取得
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
// 今開いているスプレッドシートを取得
var sheet = SpreadsheetApp.getActiveSheet();
// 前半は今開いているシートの(1,1)、つまりA1の場所を指定
// 後半(setValue)は、先ほど読み込んだcsvの中身をA1に張り付け
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);

となっています。
そのため、追加しなければいけないのは、

  1. フォルダ内のファイルをすべて取得
  2. それぞれのファイルでのループ
  3. 新しいシートの挿入と、ファイル名の変更
    です。

出来上がったものが、こちらです。

.js
function myFunction() {
  var mySheet = SpreadsheetApp.getActiveSpreadsheet();
  var folder = DriveApp.getFoldersByName('test').next();
  Logger.log(folder.getName())
  var files = folder.getFiles();

  while (files.hasNext()) {
    var file = files.next();
    var currentFileName = file.getName();
    Logger.log(currentFileName)
    var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
    Logger.log(csvData)

    let newSheet = mySheet.insertSheet();
    newSheet.setName(currentFileName.split(".")[0]);
    newSheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);

  }
}

最初のtestとなっているところは、googledrive内のcsvファイルが格納されているフォルダ名に変えてください。

参考

1Like

早々にとても丁寧に回答いただきありがとうございました。
コードの投稿に仕方についても承知しました。

解決いたしました。

0Like

Your answer might help someone💌