驚くほど簡単!GASを使ってExcelファイルを読み込む方法

GASでExcelファイルを読み込む方法ってどうすればいいの…
猫男
猫男
catman
catman
心配はいらないさ。catmanが、GASでExcelファイルを読み込む方法を伝授しよう。

GASでExcelファイルを読み込む方法

まずはGASでエクセルファイルを読み込むための準備から。

次の4ステップを踏んでみよう。

Googleドライブにファイルをアップロード

GoogleドライブにExcelファイルをアップロードしよう。

gas エクセル 読み込み

 

エクセルのファイルIDを取得

次に、そのエクセルファイルをGASで扱うためにはファイルのIDが必要になる。

以下の関数を実行してファイルIDを取得する方法もありだ。

 // ドライブ内のファイルを取得する
function checkFileId() {
  var file = DriveApp.getFilesByName('sample_excel.xlsx').next();
  var fileId = file.getId();
  Logger.log('File ID: ' + fileId);

}

✅ ここでは、特定の名前(ここでは’sample.xlsx’)でファイルを検索し、そのID を取得してログに出力している。

 

「IDを取得するためにGASを使いたくない!」

という気持ちなら、さっきアップロードしたエクセルファイルをドライブ上で開いてみよう。

https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxx/

というURLだったら、/d/より後の

xxxxxxxxxxxxxxxxxxxx

がIDだ。

 

Drive APIを有効にする

エディターの左から、左のサービスからDrive APIを有効化しよう。

gas エクセル 読み込み

 

Driveという名前がついているやつが複数があるが、

Drive API

というシンプルなものを今回は選ぼう。

gas エクセル 読み込み

 

Excelファイルをスプレッドシートへ変換する

いよいよ、Excelファイルをスプレッドシートに変換するぞ。この操作でエクセル内のデータをGASで使えるようになる。


function importExcelFile() {
  const fileId = 'EXCEL_FILE_ID'; // Drive上のExcelファイルのIDを入力
  const file = DriveApp.getFileById(fileId);

  // Excelファイルをスプレッドシートとしてインポート
  const resource = {
    title: file.getName(),
    mimeType: MimeType.GOOGLE_SHEETS
  };

  const imported = Drive.Files.copy(resource, fileId);
  const spreadsheet = SpreadsheetApp.openById(imported.id);
  
  Logger.log('インポート成功: ' + spreadsheet.getUrl());
}

  • DriveApp.getFileById(fileId): Google Driveから該当ファイルを取得。
  • resource: スプレッドシートとしてインポートするための設定オブジェクト。
    • title: 新しく作成するファイル名
    • mimeType: MimeType.GOOGLE_SHEETS を指定することで「スプレッドシート」に変換。
  • Drive.Files.copy(): 指定したファイル(Excel)を Google スプレッドシートとして複製。
  • SpreadsheetApp.openById(): 変換された新しいスプレッドシートの内容にアクセス。
  • Logger.log(): インポートしたスプレッドシートのURLをログに出力。
なるほど、Excelをスプレッドシートで扱えるように変換するんだね。それなら加工しやすそう!
猫男
猫男

GASでExcelデータを加工して利用する

エクセルを読み込んだだけじゃ満足できない・・・だと?

次のスクリプトなら、エクセルをスプレッドシート化して即データを取得し、ログに出力できるぞ。


function importExcelFileAndReadValue() {
  const file = DriveApp.getFilesByName('sample_excel.xlsx').next();
  const fileId = file.getId(); // ExcelファイルのID


  const resource = {
    title: file.getName(),
    mimeType: MimeType.GOOGLE_SHEETS
  };

  const imported = Drive.Files.copy(resource, fileId);
  const spreadsheet = SpreadsheetApp.openById(imported.id);
  const sheet = spreadsheet.getSheets()[0]; // 最初のシートを取得

  Logger.log('インポート成功: ' + spreadsheet.getUrl());

  // 取得してログに出力
  var values = sheet.getDataRange().getValues();

  for (var i = 0; i < values.length; i++) {
    Logger.log(values[i]);
  }
}

getDataRange().getValues()はシート内のすべてのデータを二次元配列として取得する処理を加えているバージョンだ。

forループでデータを処理しよう。

 

catman
catman
このようにしてデータを取得して分析しよう。例えば集計やグラフ作成のために使うという感じだな。

 

練習問題:GASでExcelファイルを読み込んで特定のデータを抽出しよう

あるExcelファイルがあり、その中のA列に売上データ、B列に日付が入っています。

このデータを読み込み、「9月」の売上データだけを抽出して表示するScriptを書きなさい。

 

 

解答・解説


function extractSeptemberSalesFromExcel() {
  const fileId = 'YOUR_EXCEL_FILE_ID_HERE'; // ← ここにExcelファイルのIDを入れる
  const file = DriveApp.getFileById(fileId);

  // Excelをスプレッドシートに変換
  const resource = {
    title: file.getName().replace('.xlsx', ''),
    mimeType: MimeType.GOOGLE_SHEETS
  };
  const imported = Drive.Files.copy(resource, fileId); // Drive APIが必要
  const sheet = SpreadsheetApp.openById(imported.id).getSheets()[0];

  // データ取得
  const values = sheet.getDataRange().getValues();

  // 売上を抽出(ヘッダーをスキップするなら i = 1 から)
  for (let i = 1; i < values.length; i++) {
    const sales = values[i][0]; // A列:売上
    const date = values[i][1];  // B列:日付

    if (date instanceof Date) {
      if (date.getMonth() === 8) { // 9月(0=1月, ..., 8=9月)
        Logger.log(`日付: ${date.toDateString()}, 売上: ${sales}`);
      }
    }
  }
}

このスクリプトでは、まずDriveAppから指定のExcelファイルを取得し、それをスプレッドシートに変換しています。

それから、データを一行ずつ確認し、B列のデータが9月のものだけを抽出しています。

date.getMonth() は0から始まるので9月は8で判定します。結果をLoggerで出力しています。