GASでエクセルの値を取得する

GAS(GoogleAppsScript)は、Google スプレッドシートの値を取得できます。2019/5からGoogle ドライブ上の Office 形式のファイルを直接、編集できるようになりました。

GASからも直接XLSXファイルからデータを取り出せるのでしょうか。試してみました。

GASとエクセルとスプレッドシートを用意

GASテストフォルダを作成し、ローカルで作成したエクセルファイルをアップデートしました。スプレッドシートとGASを作成しました。

スプレッドシート

A1セルに値を入力。

エクセル

A1セルに値を入力。エクセル形式の場合、タイトルの横に「.XLSX」が表示されます。

GoogleAppsScript

スプレッドシートのセルの値を取得する関数と、エクセルのセルの値を取得する関数を作成しました。

GASの実行

実行してみたところ、スプレッドシートのセルの値は取得できましたが、エクセルはエラー終了しました。

Exception: Service Spreadsheets failed while accessing document with id —-

やはり、エクセルはスプレッドシートに変換してないと、参照できません。

GASでエクセルをスプレッドシートへ変換する

手動でエクセルをスプレッドシートに変換することもできますが、Google Drive APIを利用すると、プログラムからエクセルをスプレッドシートに変換できます。Google Drive APIとは「Google Drive」の「API」です(そのまま)。つまり、「Google Drive」をプログラムで操作するための公開している「API」です(そのまま)。

Drive.Files.insertで、エクセルから新規スプレッドシートを作成可能です。

  Drive.Files.insert({
    'mimeType': 'application/vnd.google-apps.spreadsheet',
    'parents': [{ 'id': dirId }],
    'title': 'NewExcel'
  }, content);

実行してみた

実際のIDを入力して、実行してみました。

ReferenceError: Drive is not defined でエラー終了しました。GoogleAppsScriptの標準ではGoogle Drive APIは利用できません。

GASでGoogle Drive APIを有効にする

Apps Script プロジェクトを開きます。

左側の [エディタ] code をクリックします。

左側の [サービス] の横にある [サービスを追加] add をクリックします。

高度な Google サービスのなかから「Drive API」選択し、[追加] をクリックします。

サービスに下にDriveが追加されます。コードの補完が可能になります。

実行してみた

正常に終了し、エクセルファイルからスプレッドシートに変換できました。

GASから、ファイル名でスプレッドシートを取得して、操作可能になります。

エクセルから変換するたびにスプレッドシートが作成されるために、過去のスプレッドシートは削除してから、変換しましょう!

生成したスプレッドシートのIDをすぐに取得

Drive.Files.insertの戻り値はfileのオブジェクトのため、スプレッドシートのIDが取得できます。すぐにスプレッドシートの内容を読み取ることもできます。

GASで値を取得後、すぐに削除もできます。

Drive APIはGASだけではなく、JavaやPHP、Python、Javascript、Goから利用できます。

以上です。

GoogleAppsScript

Posted by zzz