【DO!BOOK・ページリンク】
migaro_tech2013   28 / 100

BOOKをみる

10秒後にBOOKのページに移動します


26 利用してExcel → PDF バッチ処理」変 換し、それをクライアントに配布するこ とを可能とした。 ※ Saving Workbooks to PDF and XPS Formats in Excel2007 http://msdn.microsoft.com/en-us/ library/bb407651.aspx?cs-savelang= 1&cs-lang=vb#code-snippet-5 DelphiでExcelと PDFを作成しなかった 理由  今回は、IBM i でExcel を作成する 方法、およびそのExcel からOffice エ ンジンを利用してバッチ的にPDF を作 成する方法を紹介した。しかし、Delphi でもExcel やPDF の作成は可能である。  では、なぜDelphi でExcel やPDF を作成しなかったか? その理由として、 Delphi でExcel を作成する場合はOLE で作成するため、多少の処理時間がかか ることが挙げられる。またクライアント 側で処理するのではなく、他のプロシー ジャーとともにIBM i で処理すること がよいのではと思う。  また、PDF 作成も無償サードパー ティー製品で作成可能である。ただし、 罫線の制御やフォントの制御を加味して 帳票を作成するには、少し労力が必要で ある。他方、有償サードパーティー製品 を利用するのは1 つの手段であり、当然 それなりのコストも発生する。  なお、今回の組み合わせによる帳票作 成は、当社はOffice2007 導入済みとい うこともあり、追加投資を必要としな かった。 メッセージと課題  以上を踏まえたうえで、私はIBM i でExcel を作成することを決断した。 そして、そのExcel からPDF を作成す ることとした。  そこで危惧されることは「Java は敷 居の高い言語?」と感じる人が多いはず である。しかし、私はそんなことはない と断言する。なぜなら、今回のJava は そんなに難しい考え方を行っていないこ ともあるが、RPG 畑で育ってきた私自 身が実装している。本稿を読んだ人はぜ の中に、IFS を操作できるCoIFS コン ポーネントがある。  当然Delphi では、IFS をネットワー クドライブとして認識させることは可能 である。そして信じられないかもしれな いが、Delphi とFTP の連携では多少面 倒な処理も、Delphi/400 では簡単に処 理可能となる。【ソース1】  しかし、ここで新たな問題点が発生し た。検証当初は、拡張子を「xlsx」タイ プでExcel を作成していた。このタイ プで作成した場合、かなり処理時間がか かることがわかり、実運用には不向きだ という結論に至った。  そこでゼロベースで再考した結果、拡 張子を「xls」タイプでExcel を作成し、 処理時間を比較してみた。その結果、処 理時間としては約1/7 .1/9 くらい短 いことが確認できた。幸いなことに、マ イクロソフトの発表によれば、拡張子 xls タイプのExcel はOffice2013 も対 応していることが確認できた。そこで私 は、拡張子xls タイプでExcel を作成す ることとした。【図2】 Delphi + Officeエンジンによる Excel→PDFバッチ処理  ある意味、裏技的な処理を紹介する。 多くのユーザーが利用しているOffice というソフトがある。ご存知の通り、 Office2007 以降ではPDF 変換機能が備 わっており、一度該当ファイルを開き、 保存する時にPDF を選択すれば簡単に PDF を作成することができる。  しかし、その該当ファイルを開くこと なく、バッチ的にPDF を作成する方法 はないだろうか? うれしいことに、マ イクロソフトはこれらの情報を公開して いる。(※)  この情報を参考に、Delphi で該当 Excel をPDF にバッチ変換できること を検証できた。参考までに、そのコーディ ングおよび実行結果を記しておく。 【ソース2】【図3】  この検証結果をベースに、Java を利 用してIFS に作成したExcel を、 Delphi/400 を利用してクライアントに 配布、そしてIFS に作成したExcel を ベースに「Delphi + Office エンジンを ことである。 ・解決その1  実際にその方法を考えると、最初に、 IBM i のNetServer 機能(クライアン ト側から、IFS をネットワークドライブ として認識できる機能)を利用し、IBM i をファイルサーバーとして利用するこ とが考えられた。しかし、IBM i のコ ストから考えると、この利用方法は非常 にコストパフォーマンスの悪い解決方法 になってしまう。 ・解決その2  また、IBM i で作成したExcel をメー ルに添付し、エンドユーザーに配布する 方法も考えられる。この方法は、個人別 ログイン等でエンドユーザーと送信先 メールアドレスを関連付ける必要はある が、IBM i でJava を利用することによ り簡単に実現可能である。  ただし、Excel をメールに添付して送 信する方法はセキュリティに問題が生じ るため、その帳票の性質を十分に考慮す る必要がある。 ・解決その3  そこで、次に挙げられる方法として、 FTP でIFS のExcel をGET する方法 が考えられる。確かにこの方法は、 NetServer 機能と抱き合わせて考える ことにより可能である。  とはいえ、IFS のExcel をGET する 方法を知っている人は少ないのではと思 う。参考までに以下にその方法を記して おく。  該当IFS フォルダーに適切な制御を 与え、ネットワークドライブ接続を確立 することにより、Delphi をトリガーと してIFS の該当ファイルの取得は可能 である。  なお、私の知る限りこのような処理を 行っている人は知らないし、一般的にも このような処理を行っている人は少ない と予想される。【図1】 ・解決その4  そこで私が行った内容を紹介する。当 社ではDelphi/400 を導入しており、 IBM i とやり取りを行っている。一般 的な使い方でもかなり有効に活用できる が、このDelphi/400 のコンポーネント