ExcelファイルのデータをGASで処理するには、GoogleDrive上でExcelファイルを開いてGoogleスプレッドシートで保存する必要があります。
小さなExcelファイルなら上記の方法でも構いませんが、大きなExcelファイルだと ”Googleスプレッドシートとして保存” で時間がかかりすぎて保存できない、、、。
また複数ファイルがあるときは一括変換できれば楽ちんです。
ということで、GASでExcelファイルをGoogleスプレッドシートに変換する2つの方法について説明します。
- Excelファイルを指定してスプレッドシートに変換する
- フォルダにあるExcelファイルを一括変換する
Excel to Google Sheets には Drive APIが必要
Google Apps Script でExcelファイルを開く場合には、Googleドライブのファイルやフォルダを操作できる DriveAppクラス を使います。
但し、そのまま、DriveAppのコードを書いて実行しても
と、実行できません。
Drive APIサービスを追加する
DriveAppクラスを使うためには、Apps Scriptエディターの左側のメニューにある「サービス」からDrive APIを追加する必要があります。
① サービスの右側にある+をクリック
② 一覧から Drive API を選択して追加
Drive APIが追加されると左メニューのサービスの下にDriveが表示されます。
これで DriveAppクラスが利用できます。
Excelファイルを指定してスプレッドシートに変換する
Excelファイルを指定して、指定したフォルダにGoogleスプレッドシートを出力するサンプルコードとなります。
Excelファイルと出力先のフォルダはIDで指定します。
ExcelファイルとフォルダのID
GoogleドライブからExcelファイルを開いたURLのXXXXXの部分がIDとなります。
GoogleドライブのフォルダIDは、XXXXXの部分がIDになります。
サンプルコード(Excelファイル指定)
上記で説明したExcelファイルと出力先のフォルダのIDを指定する、簡単なサンプルコードです。
12行目で取得したExcelファイル名を13行目でログに出力していますが、変換したGoogleスプレッドシート名も同じファイル名にしています。
function convertExcel() { //変換するExcelファイル let excelFileId = 'XXXXX' //スプレッドシート出力先フォルダー let destFolderId = 'XXXXX' //ExcelファイルをファイルIDで取得 var excelFile = DriveApp.getFileById(excelFileId) //Excelファイル名取得 var fileName = excelFile.getName() Logger.log(fileName) var option = { mimeType:MimeType.GOOGLE_SHEETS, //Google sheets parents:[{id:destFolderId}], //出力先フォルダー title:fileName //出力先ファイル名 } Drive.Files.insert(option,excelFile) }
20行目の
Drive.Files.insert(option,excelFile)
で、変換を実施していますが、15〜19行目のオプションで、
- MIMEタイプ
- 出力先フォルダー
- 出力先ファイル名
を指定しています。
スプレッドシートへの変換なのでMIMEタイプをGOOGLE_SHEETSとしていますが、Enum MimeType | Apps Script | Google Developers に全てのMIMEタイプが記載されています。
変換後に処理を続ける
Googleスプレッドシートに変換してから、そのままシートをGAS処理する場合には、20行目からを下記のように変更してください。
取得したシート名をログに出力する簡単なサンプルです。
function convertExcel() { //変換するExcelファイル let excelFileId = 'XXXXX' //スプレッドシート出力先フォルダー let destFolderId = 'XXXXX' //ExcelファイルをファイルIDで取得 var excelFile = DriveApp.getFileById(excelFileId) //Excelファイル名取得 var fileName = excelFile.getName() Logger.log(fileName) var option = { mimeType:MimeType.GOOGLE_SHEETS, //Google sheets parents:[{id:destFolderId}], //出力先フォルダー title:fileName //出力先ファイル名 } var sheetObj = Drive.Files.insert(option,excelFile) //スプレッドシートIDを使って、スプレッドシートオブジェクトを取得 var sheet = SpreadsheetApp.openById(sheetObj.id).getActiveSheet() Logger.log(sheet.getName()) }
変換したスプレッドシートにシートが複数ある場合には、getSheetByName() でシート名を指定します。
フォルダにあるExcelファイルを一括変換する
次は、フォルダにある複数のExcelファイルを一括でGoogleスプレッドシートに変換する方法です。
フォルダにExcelファイル以外がある場合には処理されないようにしています。
function convertExcels() { //Excelがあるフォルダ let sourceFolderId = 'XXXXX' //スプレッドシート出力先フォルダー let destFolderId = 'XXXXX' // フォルダ配下のファイルを取得 var sourceFolder = DriveApp.getFolderById(sourceFolderId) var folderFiles = sourceFolder.getFiles() // Excelファイルをイテレートして順にスプレッドシートに変換 while(folderFiles.hasNext()) { var file = folderFiles.next() //Excelファイルの判断 if (file.getMimeType() == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') { var fileName = file.getName() Logger.log(fileName) Logger.log(file.getMimeType()) var option = { mimeType:MimeType.GOOGLE_SHEETS, //Google sheets parents:[{id:destFolderId}], //出力先フォルダーを指定 title:fileName //出力先ファイル名 } Drive.Files.insert(option,file) } } }
フォルダにあるファイル一覧を取得しているのが、8〜9行目です。
そして、12行目の while文のhasNext() で13行目の next()で取得したファイル一覧から取り出せるファイルが残っているかを調べて、順番にファイルを処理していきます。
Excelファイルだけを変換するために、取り出したファイルがEXCELファイルかを15行目で調べています。
18行目でgetMimeType()でファイルのMIMEタイプを出力していますが、application/vnd.openxmlformats-officedocument.spreadsheetml.sheet が、拡張子xlsのExcelファイルとなります。
GASの基礎を学べる参考図書
ある程度プログラミンがわかっていれば、WEBやYoutubeでも十分に調べられると思いますが、初歩的なところからであれば参考図書は有効な学習手段です。
「詳解! Google Apps Script完全入門 [第3版]」は、プラグラミング初心者にわかりやすく説明されています。GASを最初に学ぶ一冊として良書です。
Udemy オススメ講座
【新IDE対応】Google Apps Script(GAS)の基礎を完全習得
講師:事務職たらこ
印象に残りやすい手書き風スライドを用いGASの基本的なプログラミングを気軽に学ぶことができる。本講座でGASを活用した自動化ができるレベルにはなれないが、基礎としては十分。