GoogleDriveを使ってExcelからPDFへ変換する


はじめに

ASTERIA Warpを使って「ExcelからPDFへ変換」を考えてみました。

まずExcelファイルをそのままPDFファイルへ変換するようなコンポーネントは現在用意されていません。
”変換(エクスポート)”ではないですがExcelPOIInputとPDFコンポーネントを使って読み込んだExcelファイルのデータをもとにPDFデータを作ることは思いつきます。
「ExcelのPDFエクスポート機能を使ったVBAプログラム」を自作してExeコンポーネントで実行 もありますが今回はGoogleDriveを使ってExcelからPDFヘ変換(エクスポート)する方法を考えてみました。

環境

  • OS: Windows10
  • Java:1.8.0.191
  • ASTERIA Warp : 1812

フロー

GoogleDriveアダプターのGoogleDriveSQLCallを使います。
完成したフローはこんな感じです。

大まかには
GoogleDriveへアップロード → (アップロードしたIdの取得) → GoogleDriveからダウンロード → アップロードしたファイルの削除 といった感じです。

ダウンロード - GoogleDriveSQLCall

まずは肝となるダウンロード部分のGoogleDriveSQLCallから。
ストアドプロシージャのDownloadFileを使いました。
記述方法はCData Software Inc.社のオンラインドキュメントを参考にしています。

「CData JDBC Driver for Google Drive 2018J」
[データモデル]-[ストアドプロシージャ]-[DownloadFile]
http://cdn.cdata.com/help/GGD/jdbc/pg_sp-downloadfile.htm

プロシージャのInput

Name Type 説明
Id String ダウンロードするリソースのId
FileFormat String ファイルの保存時に適用されるファイル形式
LocalFile String 保存先のローカルファイルパス
Encoding String LocalFile インプットが空白の場合に使用されるエンコード
Overwrite String 保存先のファイルを上書きするかどうか

にあわせて以下のような設定にしました。

実行する処理:ストアド実行(結果なし)
SQL文:{ call DownloadFile(?Id?,?FileFormat?,?LocalFile?,?Encoding?,?Overwrite?)}

SQLパラメーター:

「FileFormat」にはapplication/pdfを指定してます。

「Id」はひとまずブラウザからURLに埋め込まれているファイルのIdを確認してセットしてもOKだと思います。

エクスポートの制限

ExcelをGoogleDriveにアップロードしてGoogleDriveSQLCallでpdfに変換しようとすると

Export only supports Google Docs.

というエラーになりました。FileFormatを指定してエクスポートするときはGoogle Docsしかサポートされていないようです。ExcelではなくGoogle スプレッドシートではないとダメなようです。

MIMETypeを確認する

ということでダウンロードするファイルタイプを確認してみます。
ブラウザーからはファイルの詳細の種類で確認できそうです。

GoogleDriveGetではFilesテーブルのMIMETypeというフィールドの値で確認できるみたいです。

アップロード - GoogleDrivePut

上記エクスポートの制限があるので「MIMEType」にGoogleDriveGetで確認できた値application/vnd.google-apps.spreadsheetをセットしてます。
「MIMEType」をセットしておくとアップロード時に適宜、ファイル形式を変換してくれるようです。

<GoogleDrivePutの内容>

<直前のマッパーの内容>

wordやpptファイルも変換対象にしてみたのでTable関数使って拡張子でセットする値を変えてます。
ParentIdsはアップロード先のフォルダーIdをセットしてみてます。

ファイル削除 - GoogleDrivePut

アップロードして・・pdfでエクスポートして・・最後にアップロードしたファイルの削除を入れてます。GoogleDrivePutで「実行する処理」をDeleteとしてます。

Id取得 - GoogleDriveGet

アップロードしたファイルのIdを取得するために今回はアップロード後にもう一度GoogleDriveGetでデータ取得してます。ついでにMIMETypeとか確認するのにも使ってました。

<GoogleDriveGetの内容>

<SQL文>

SELECT A.Id,
       A.Name,
       A.MIMEType,
       A.ParentIds,
       B.Name 
  FROM GoogleDrive.Files A LEFT OUTER JOIN GoogleDrive.Folders B ON A.ParentIds = B.Id 
 WHERE A.Trashed = 'false'
   AND  A.Folder = 'false'
   AND  A.Name = ?FileName?
   AND  B.Id = ?ParentId?

おわりに

FileFormatに何も指定しなければそのままのファイル形式でダウンロードできるようです。コネクションの作成手順などは割愛しましたが、GooleDriveSQLCallを使ったpdf変換含めGooleDriveGet、GoogleDrivePutの使い方、勘所などの参考にもなれば幸いです。

以上です。