Translate

Post Date:2022年3月6日 

GASでExcelをGoogleスプレッドシートに変換する

ゾウでもわかる Google Apps Script

ExcelファイルのデータをGASで処理するには、GoogleDrive上でExcelファイルを開いてGoogleスプレッドシートで保存する必要があります。

ExcelをGoogleスプレッドシートとして保存

小さなExcelファイルなら上記の方法でも構いませんが、大きなExcelファイルだと ”Googleスプレッドシートとして保存” で時間がかかりすぎて保存できない、、、。

また複数ファイルがあるときは一括変換できれば楽ちんです。

ということで、GASでExcelファイルをGoogleスプレッドシートに変換する2つの方法について説明します。

  1. Excelファイルを指定してスプレッドシートに変換する
  2. フォルダにあるExcelファイルを一括変換する

Excel to Google Sheets には Drive APIが必要

Google Apps Script でExcelファイルを開く場合には、Googleドライブのファイルやフォルダを操作できる DriveAppクラス を使います。

但し、そのまま、DriveAppのコードを書いて実行しても

エラー ReferenceError: Drive is not defined

と、実行できません。


Drive APIサービスを追加する

DriveAppクラスを使うためには、Apps Scriptエディターの左側のメニューにある「サービス」からDrive APIを追加する必要があります。

① サービスの右側にある+をクリック

サービスの追加

② 一覧から Drive API を選択して追加

Drive APIを選択

Drive APIが追加されると左メニューのサービスの下にDriveが表示されます。

サービスにDriveが追加

これで DriveAppクラスが利用できます。


Excelファイルを指定してスプレッドシートに変換する

Excelファイルを指定して、指定したフォルダにGoogleスプレッドシートを出力するサンプルコードとなります。

Excelファイルと出力先のフォルダはIDで指定します。


ExcelファイルとフォルダのID

GoogleドライブからExcelファイルを開いたURLのXXXXXの部分がIDとなります。

https://docs.google.com/spreadsheets/d/XXXXX/edit

ExcelのファイルID

GoogleドライブのフォルダIDは、XXXXXの部分がIDになります。

https://docs.google.com/drive/u/0/folder/XXXXX

フォルダID


サンプルコード(Excelファイル指定)

上記で説明したExcelファイルと出力先のフォルダのIDを指定する、簡単なサンプルコードです。

12行目で取得したExcelファイル名を13行目でログに出力していますが、変換したGoogleスプレッドシート名も同じファイル名にしています。

  1. function convertExcel() {
  2. //変換するExcelファイル
  3. let excelFileId = 'XXXXX'
  4.  
  5. //スプレッドシート出力先フォルダー
  6. let destFolderId = 'XXXXX'
  7.  
  8. //ExcelファイルをファイルIDで取得
  9. var excelFile = DriveApp.getFileById(excelFileId)
  10.  
  11. //Excelファイル名取得
  12. var fileName = excelFile.getName()
  13. Logger.log(fileName)
  14.  
  15. var option = {
  16. mimeType:MimeType.GOOGLE_SHEETS, //Google sheets
  17. parents:[{id:destFolderId}], //出力先フォルダー
  18. title:fileName //出力先ファイル名
  19. }
  20. Drive.Files.insert(option,excelFile)
  21. }

20行目の

Drive.Files.insert(option,excelFile)

で、変換を実施していますが、15〜19行目のオプションで、

  • MIMEタイプ
  • 出力先フォルダー
  • 出力先ファイル名

を指定しています。

スプレッドシートへの変換なのでMIMEタイプをGOOGLE_SHEETSとしていますが、Enum MimeType | Apps Script | Google Developers に全てのMIMEタイプが記載されています。


変換後に処理を続ける

Googleスプレッドシートに変換してから、そのままシートをGAS処理する場合には、20行目からを下記のように変更してください。

取得したシート名をログに出力する簡単なサンプルです。

  1. function convertExcel() {
  2. //変換するExcelファイル
  3. let excelFileId = 'XXXXX'
  4.  
  5. //スプレッドシート出力先フォルダー
  6. let destFolderId = 'XXXXX'
  7.  
  8. //ExcelファイルをファイルIDで取得
  9. var excelFile = DriveApp.getFileById(excelFileId)
  10.  
  11. //Excelファイル名取得
  12. var fileName = excelFile.getName()
  13. Logger.log(fileName)
  14.  
  15. var option = {
  16. mimeType:MimeType.GOOGLE_SHEETS, //Google sheets
  17. parents:[{id:destFolderId}], //出力先フォルダー
  18. title:fileName //出力先ファイル名
  19. }
  20. var sheetObj = Drive.Files.insert(option,excelFile)
  21.  
  22. //スプレッドシートIDを使って、スプレッドシートオブジェクトを取得
  23. var sheet = SpreadsheetApp.openById(sheetObj.id).getActiveSheet()
  24. Logger.log(sheet.getName())
  25. }

変換したスプレッドシートにシートが複数ある場合には、getSheetByName() でシート名を指定します。


フォルダにあるExcelファイルを一括変換する

次は、フォルダにある複数のExcelファイルを一括でGoogleスプレッドシートに変換する方法です。

フォルダにExcelファイル以外がある場合には処理されないようにしています。

  1. function convertExcels() {
  2. //Excelがあるフォルダ
  3. let sourceFolderId = 'XXXXX'
  4. //スプレッドシート出力先フォルダー
  5. let destFolderId = 'XXXXX'
  6.  
  7. // フォルダ配下のファイルを取得
  8. var sourceFolder = DriveApp.getFolderById(sourceFolderId)
  9. var folderFiles = sourceFolder.getFiles()
  10.  
  11. // Excelファイルをイテレートして順にスプレッドシートに変換
  12. while(folderFiles.hasNext()) {
  13. var file = folderFiles.next()
  14. //Excelファイルの判断
  15. if (file.getMimeType() == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {
  16. var fileName = file.getName()
  17. Logger.log(fileName)
  18. Logger.log(file.getMimeType())
  19. var option = {
  20. mimeType:MimeType.GOOGLE_SHEETS, //Google sheets
  21. parents:[{id:destFolderId}], //出力先フォルダーを指定
  22. title:fileName //出力先ファイル名
  23. }
  24. Drive.Files.insert(option,file)
  25. }
  26. }
  27. }

フォルダにあるファイル一覧を取得しているのが、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)の基礎を完全習得

【新IDE対応】Google Apps Script(GAS)の基礎を完全習得

講師:事務職たらこ

印象に残りやすい手書き風スライドを用いGASの基本的なプログラミングを気軽に学ぶことができる。本講座でGASを活用した自動化ができるレベルにはなれないが、基礎としては十分。

0 件のコメント:

コメントを投稿

象と散歩:人気の投稿(過去7日間)