Advanced Excelを用いて、OutSystemsからExcel帳票を出力する方法を確認していきます。
テンプレート帳票を用意しておいて、帳票を出力するときにシートを出力するファイルにコピー。必要なセルにだけ、OutSystemsのActionでデータを書き込む仕組み。
前提:(1)使い方に従って、セットアップがすんでいること
全部書くと長くなりそうなので、(1)使い方、(2)Excelファイルを読み込む に書いたことは省略します。
動作確認環境
Platform Version:11.0.212.0
Service Studio Version:11.5.42
Advanced Excel:2.1.23
Sampleデータとして、OutSystemsSampleDataDBモジュールのSample_ProductとSample_ProductSalesを使用します。
Table of Contents
テンプレートからシートをコピー
ここでは、用意したテンプレートファイルをResourcesに配置しておきます。
Workbook_Open Actionでテンプレートファイルを開きます。
ファイルは、Binary_DataにファイルのContentを指定して開きます。
開いたファイルから取得したシートを新たに作成したExcelファイルに追加すれば準備完了。
注意事項として、テンプレートファイルをWorkbook_Closeしてから、コピーしたシートを帳票に利用しようとするとエラーになりました。テンプレートファイルのWorkbookは最後にCloseする必要がありそうです。
値を書き込む
セルを指定して値を書き込む
Cell_Write Actionを使います。
Worksheet:事前にWorksheet_Selectしておいたシートオブジェクト
CellRow:行番号
CellColumn:列番号(A列が1、B列が2、……)
CellValue:書き込みたい値
CellType:数字型にしたいときは、ここに”integer”や”decimal”と指定します。テキストで良ければ未指定か”text”
画像を書く
画像を書き込むには、Image_Insert Actionを使います。
ImageFile:画像ファイルのバイナリを指定。サンプルDBでは、Entityに画像バイナリが入っているため、そのAttribute
ImageType:画像ファイルの形式。拡張子を見て同じものを設定しておけば良さそうですね。Descriptionでは、BMP, JPG, PNGのいずれか。
RowNumber:行番号
ColumnNumber:列番号
行を追加する
テンプレート下部のテーブルは、表示時点でないと何行になるかわかりません。
そこで、テーブルに表示したい行を処理するときに、Row_Insertで1行追加するようにしています。
InsertAtに行を追加したい行番号を指定してください。1行ずつ追加する場合は、NrRowsは未指定で大丈夫。
式を書く
式を適用するときも値と同じくCell_Write。
CellType=”formula”にして、CellValueに計算式を設定します。
また、ユーザがファイルを開いた時点で計算式を適用しておくには、Worksheet_Calculateなどを呼んでおく必要があります。
コメント
【開いたファイルから取得したシートを新たに作成したExcelファイルに追加すれば準備完了。】
の部分なのですが、取得したシートをそのままCreateしたWorkbookに追加(コピー?のイメージ)できず困っています。
Addsheetではできないですよね?
ぜひご教示いただきたく思います。
よろしくお願い致します。
AddSheetで合っていると思います。
コメントだけだでは判別できませんが、以下の流れの②でシートを取得しているでしょうか。
【開いたファイルから取得したシートを新たに作成したExcelファイルに追加すれば準備完了。】
を分解すると
①テンプレートファイルを開く(Workbook_Open Action)
②開いたテンプレートファイルのワークシートを選択する(Worksheet_Select Action)
入力は①のOutputと、選択するシート名
出力としてObject型のワークシートオブジェクトが得られます
③Excelファイルを作成する(Workbook_Create Action)
④②で選択したワークシートを③のOutput(ワークブックオブジェクト)に追加する(WorkBook_AddSheet Action)
という流れです。
この流れでやっているようであれば、エラーメッセージや問題を再現できるomlファイルをください。