Hello, DioDocs!
ではハンズオンを開始します。まずはExcelからPDFを作成してみましょう。Visual Studioを起動して新しいプロジェクトを作成してください。
「コンソール」アプリケーションを検索し、その中から「コンソールアプリ(.NET Core)」でC#のプロジェクトテンプレートを選択し「次へ」を選択してください。
続いてプロジェクト名に「HelloDioDocs」と入力して、プロジェクトを「作成」します。この段階で「F5」キーを押してデバッグ実行し、次のように表示されることを確認しておきましょう。
動作しましたね? ではDioDocsを試していきましょう!
まずはNuGetサーバーからDioDocsのライブラリをダウンロード・適用します。「HelloDioDocs」プロジェクトの「依存関係」を右クリックし、「NuGetパッケージの管理」を選択します。
続いて「参照」タブで「DioDocs」と入力して検索し、「Grapecity.DioDocs.Excel.ja」を選択したのち「インストール」します。バージョンはスクリーンショット上のものではなく、最新版を利用してください。
続いてテンプレートとなるExcelファイルを作成します。今回はベースとなるExcelファイルを用意してあります。以下からダウンロードしてください。
ダウンロードしたファイルをプロジェクト直下にコピーし、プロパティの「出力ディレクトリにコピー」を「新しい場合はコピーする」に変更してください。
では実際にDioDocsを使ってみましょう。以下がHelloDioDocsプログラムの全体です。
using GrapeCity.Documents.Excel; namespace HelloDioDocs { class Program { static void Main(string[] args) { var workbook = new Workbook(); workbook.Open("Template.xlsx"); workbook.Worksheets[0].Range["B5"].Value = "Hello, DioDocs!"; workbook.Save("Invoice.pdf", SaveFileFormat.Pdf); } } }
順に説明していきましょう。
まず先頭でDioDocsの名前空間に対してusingを宣言しています。
using GrapeCity.Documents.Excel;
続いてWorkbookオブジェクトを生成してExcelファイルを開きます。
var workbook = new Workbook(); workbook.Open("Template.xlsx");
そして開かれたワークブックの先頭のシートの「B5」セルに対して、文字列を設定します。DioDocsのオブジェクト構造はVBAやVSTOのオブジェクト構造と非常に近しくなっており、それらの経験がある方には理解しやすい設計となっていることが見て取れるかと思います。
workbook.Worksheets[0].Range["B5"].Value = "Hello, DioDocs!";
最後にInvoice.pdfという名称のPDFファイルで保存しています。
workbook.Save("Invoice.pdf", SaveFileFormat.Pdf);
以下がテンプレートとなったExcelファイルと、そこから生成されたPDFファイルです。
御中の左側、企業名の領域に「Hello, DioDocs!」という文字が設定された上でPDF化されていることが見て取れます。
C#とExcelの一般的な知識だけで、多くのことができそうだということを感じていただけたのではないでしょうか?
テンプレート構文
さて、先の例ではExcelに明示的に値を設定しに行きました。
これはこれで悪くはないのですが、ExcelのレイアウトとC#のプログラムが密結合してしまっており、セルを1つ下に移動したいといった、些細なレイアウト修正でもプログラムの改修が発生してしまいます。
こういったレイアウトとロジックを分離する手段として、一般的なユーザーインターフェイスを構築するためのアーキテクチャとしては、近年ではバインディングという手法がよく利用されます。.NETだとWPFなどで利用されていますよね。
DioDocs V3Jではデータ構造とレイアウトを分離するため、バインディングと類似した「テンプレート構文」が新たに導入されました。これは非常に強力な機能です。
過去の記事で、ExcelとC#コードを疎結合にするための実装例を紹介しましたが、今後は基本的にテンプレート構文を利用していくのが良いでしょう。
では早速テンプレート構文を利用して、ハンズオンを進めましょう。