驚くほど簡単!GASを使ってExcelファイルを読み込む方法
GASでExcelファイルを読み込む方法ってどうすればいいの…

猫男

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
このようにしてデータを取得して分析しよう。例えば集計やグラフ作成のために使うという感じだな。
練習問題: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で出力しています。