ノーツは1つの製品で非常に幅広いエリアをカバーする素晴らしい製品ですが、苦手とする部分も存在します。
例えば、帳票の出力やグラフ表示です。ノーツの機能拡張を期待するところですが、現時点では他のアプリケーションの力を借りる必要があります。今の時代、1製品に頼るのではなく、組み合わせて課題解決する方が一般的かもしれません。情シス部門の腕の見せどころといえますね。
今回のシリーズでは、ノーツから Excel の機能を利用して、ノーツの機能を補いより活用する方法を検討していきます。
初回は、ノーツから Excel を操作する方法について整理します。
実現には、LotusScript の CreateObject 関数を使用します。
例えば、エージェントで以下のように作成し、実行すると新しい Excel のワークブックがデスクトップに表示されます。
Sub Initialize Dim oXls As Variant Set oXls = CreateObject("Excel.Application") Call oXls.Workbooks.Add oXls.Visible = True End Sub |
CreateObject 関数は、指定されたクラスの OLE Automation オブジェクトを作成します。引数の"Excel.Application"が、Excel を表すクラス名で、生成するオブジェクト毎にあらかじめ定義されています。Windows では、ProgID と呼び、レジストリ内に登録されているらしいです。
オブジェクトが生成されると、oXls 変数に代入されます。オブジェクトなので、Set が必要となります。
コーディング時の注意
オブジェクト生成以降は、そのオブジェクトが持つプロパティやメソッドをコールして、プログラムを完成させます。Domino Designer にしてみると、そのオブジェクトは海のものとも山のものともわかりませんので、プロパティやメソッド、引数のチェックはできません。タイプミスしても Notes Class のようにコンパイルエラーはでません。実行して初めてエラーとなるので、記述には十分注意してください。
同じ理由で、デバッグ時もオブジェクト内のプロパティは参照できません。
オブジェクトの管理
続いて、CreateObject 関数利用時の挙動の確認と注意です。
先のサンプルを実行すると、デスクトップに Excel が起動しました。エージェントの実行が終了しても、Excel は起動したままとなっていました。これは、Excel がノーツのエージェントとは別プロセスで実行していることになります。
試しに、「oXls.Visible = True」をコメントアウトして実行してみてください。Windows のタスクマネージャを開くと Excel のタスクが残ったままとなります。そして、UI に表示できないので、タスクマネージャから強制終了するしかありません。
これを回避するためには、以下のように、コードでオブジェクトを終了します。ここでは、Excel をクローズして、オブジェクト変数に Nothing を代入しています。
Sub Initialize Dim oXls As Variant Set oXls = CreateObject("Excel.Application") Call oXls.Workbooks.Add 'oXls.Visible = True Call oXls.Workbooks(1).Close(True) Set oXls = Nothing End Sub |
このように終了処理を確実に行うと、実行後 OS にゴミが残りません。また、うまくコントロールできるようになると、UI に一切表示することなく Excel の操作ができるようになります。
Excel オブジェクト構造の調べ方
先述した通り、CreateObject した Excel では、Domino Designer からプロパティやメソッドは参照できません。それらを調べるためには、Microsoft Learn の力を借りることになります。
https://learn.microsoft.com/ja-jp/office/vba/api/overview/excel
CreateObject("Excel.Application") で作成されるオブジェクトは、引数の通り Excel の Application オブジェクトとなります。Microsoft Learn の『オブジェクト モデル』より、Application オブジェクトを探してみてください。ありましたか?
この記事を書いている時点では、”Application オブジェクト” ではなく ”アプリケーション オブジェクト”と表示されていました。
このサイトは機械翻訳されているようで、不必要に日本語化されていることがありますので、注意して参照ください。
UI表示は遅い?
今回のサンプルで、Application クラスの Visible プロパティを True に設定することにより、Excel を UI に表示できることを紹介しました。
オブジェクト生成時に、UI に表示すると、プログラムの実行状況が目に見えるので、挙動が確認できて面白いです。
ただ、UI に表示する分、処理速度は下がります。こんな時は、UI の表示を処理の最後に変更すれば、少しは改善できます。
Notes - Excel 連携 | 次回 |
0 件のコメント:
コメントを投稿