Forgeコンポーネント「Advanced Excel」の導入手順です。
OutSystemsのActionから、Excelファイルの作成・読み込み・編集ができます。
標準のExcel機能は。決まったフォーマットのファイルだけですが、このコンポーネントは、ロジックを組んで自由に操作できます。
動作確認環境
Platform Version:11.0.212.0
Service Studio Version:11.5.42
Advanced Excel:2.1.23
Table of Contents
Advanced Excel
Excelファイルの読み込み・出力、書式設定、グラフ作成などもできるツールです。
この記事を書いている時点では、頻繁にアップデートされています。
APIの使い方は、ForgeのDocumentationタブに記載があります(英語ですが)。
セットアップ
インストール
Service Studioを起動します。
Browse Forgeで「Advanced Excel」で検索。Browse Forgeは、画面最上部タブの、一番左をクリックで開きます。
Advanced Excelを選択。右側の「INSTAL…」ボタンでインストールしてください。
テスト用モジュールへの参照追加
動作確認するモジュールを開きます。
Manage Dependenciesダイアログを開きます。ショートカットキーCTRL+Qです。
Advanced Excel全要素のチェックを入れて「APPLY」ボタンをクリック。
これで準備ができました。
テストプログラム
簡単なテストプログラムで動作確認してみます。
Inputの入力を、2行目・2列目の位置に書き込んだファイルをDLさせる画面です。
画面作成
今回はScreen Template不要です。
UI Flowを選択してCTRL+NでEmptyのテンプレートで画面を作ります。
(もちろん、Add Web ScreenのメニューからEmptyを選択して作っても同じです)
できた画面に、以下のようにInputとButtonだけ配置しました。
Screen Action
ダウンロードしたときのScreen Actionを作ります。
用語については、下の参考情報を参照してください。
各Actionとそのパラメータの説明:
- Workbook_Create:メモリ上でExcelファイルを作成する。パラメータ指定は無し
- WorkBook_AddSheet:作成したExcelファイルにシートを追加
- Workbook:Workbook_CreateのOutput Parameterを指定
- WorksheetName:シート名。何でもいいがここでは”Demo”を指定
- Worksheet:ブックに追加したいWorksheetオブジェクトを指定。ただしブランクにする場合は、NullObject()。
- Worksheet_Select:4でセルを追加するシートのオブジェクトを取得
- Workbook:Workbook_CreateのOutput Parameter
- WorksheetName:シート名。上で追加しておいた”Demo”
- Cell_Write:指定の位置へ指定の値を書き込む
- CellRow:行番号(ex: 2)
- CellColumn:列番号(ex: 2)
- CellValue:値。この画面では、Input Widgetに紐付けた変数を設定
- Workbook_GetBinaryData:ダウンロード用にBinaryData型でExcelファイルデータを取得する
- Workbook_Close:Createで作成したExcelファイルをメモリから解放する。ドキュメントにより、解放するように指示されています
- Download:OutSystems標準のダウンロード機能。File Contentは↑で取得したBinary Dataを指定してください
実行例:
参考情報
用語
Excelファイルを扱うC#やJavaScriptのライブラリでよく見るのと同じですね。
- Workbook:Excelファイル自体(ブック)を表す
- Worksheet:ブック内の各シートを表す
行位置・列位置は1起点
Closeは必須
ドキュメントでは、Excelファイルの操作が終わったら、Workbookを確実にリリースしてメモリを解放するようにと書いてあります。
OutSystemsではTry-Finallyに相当する仕組みがないです。そのため、Advanced Excelを利用するロジックをUser Actionに切り出す方法がいいかもしれません。Action内でException Handlerで全例外を拾って、そこでもCloseするようにする。
なお、Close済みのWorkbookを更にCloseしてみたところエラーはでませんでした。ただ、安全だという記述が見つからなかったので、念のため避けておこうかと。