earthpg:GAS専門のプログラミングスクール

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

GASでExcelファイルを読み込む方法ってどうすればいいの…
猫男
猫男
catman
catman
心配はいらないさ。catmanが、GASでExcelファイルを読み込み、それを加工する方法を教えてやる。まずは基本から理解することが大切さ。

GASでExcelファイルを読み込む基礎

まずはGASでExcelファイルを読み込むための準備から始めよう。

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

GoogleドライブにExcelファイルをアップロードするところから始める。これは基本中の基本さ。

GASでファイルIDを取得する

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

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

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

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

次は、Excelファイルをスプレッドシートに変換することだ。この操作でデータを使いやすくなる。


// Excelファイルをスプレッドシートとしてインポートする
var file = DriveApp.getFileById(fileId);
var blob = file.getBlob();
var sheet = SpreadsheetApp.create('Converted Spreadsheet').getSheets()[0];
var xlsxData = Utilities.parseCsv(blob.getDataAsString(), ',');
sheet.getRange(1, 1, xlsxData.length, xlsxData[0].length).setValues(xlsxData);

✅ getBlob()メソッドを使ってファイルデータを取得し、
そのデータをparseCsv()でコンマ区切りのデータとしてパースする。結果をスプレッドシートにセットだ。

なるほど、Excelをスプレッドシートで扱えるように変換するんだね。それなら加工しやすそう!
猫男
猫男

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

ここからは、変換したスプレッドシートのデータをどのように活用するかを見ていこう。

データを取得して処理する

スプレッドシートのデータを取得し、例えばその中のデータをログに出力してみよう。


// 変換したスプレッドシートからデータを取得
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 extractSeptemberSales() {
  var file = DriveApp.getFilesByName('sales_data.xlsx').next();
  var fileId = file.getId();
  var blob = file.getBlob();
  
  // スプレッドシートを作成してデータをインポート
  var sheet = SpreadsheetApp.create('Sales Data').getSheets()[0];
  var xlsxData = Utilities.parseCsv(blob.getDataAsString(), ',');
  sheet.getRange(1, 1, xlsxData.length, xlsxData[0].length).setValues(xlsxData);
  
  var values = sheet.getDataRange().getValues();
  
  // 抽出したいデータ(9月売上)
  var septemberSales = [];
  
  for (var i = 1; i < values.length; i++) { // ヘッダーを除くためにi=1から始まる
    var date = new Date(values[i][1]); // B列の日付
    if (date.getMonth() === 8) { // 9月(JavaScriptは月を0から始める)
      septemberSales.push(values[i][0]); // A列の売上
    }
  }
  
  Logger.log('September Sales: ' + septemberSales);
}

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

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

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