LotusScriptによるLotus Dominoのデータによるグラフィックス化されたExcelレポートの生成


引用する
周知のように、Lotus Dominoの機能は非常に強く、Lotus Designerを利用して非常に複雑で、機能が強い様々なDominoアプリケーションを開発することができます.しかし、Domino自身はMicrosoft Excelのような機能豊かなレポート、特にグラフィック化されたレポートを生成することはできません.ここでは、LotusScriptによるDominoのデータによるグラフィカルなExcelレポートの生成、およびDominoアプリケーションへのExcelレポートの統合について説明します.プロセス全体でExcelアプリケーションは表示されず、エンドユーザーはフロントでDominoアプリケーションしか表示されず、Excelとのインタラクションはすべてバックグラウンドで完了します.
トップに戻る
Object Linking and Embedding(OLE)オブジェクト
OLE技術は、すべてオブジェクト接続と埋め込み技術と呼ばれ、オブジェクト向けの技術であり、アプリケーションをオブジェクトとして相互接続するメカニズムを定義し実現することによって、アプリケーション間の統合を完了する.OLEは、お客様のアプリケーション間で情報を転送し、共有する総合的な標準であり、コンポーネントオブジェクトモデル(COM)に基づいて、現在、スプレッドシート、ワード処理、財務ソフトウェア、プロジェクト管理ソフトウェアなどに広く応用されています.
CreateObject関数とGetObject関数
LotusScriptでOLEオブジェクトを作成または取得するには、CreateObject関数またはGetObject関数を使用します.
CreateObject関数:
指定したタイプのOLEオブジェクトを作成
構文
CreateObject (className)
パラメータ
classNameはappNameです.appClass形式の文字列は、作成するオブジェクトのタイプ(WordPro.Applicationなど)を表します.appNameはOLEをサポートするアプリケーション名、appClassは作成するオブジェクトのタイプを表します
戻り値はOLEオブジェクトの参照を返します.
使用法
LotusScriptでSetを使用してCreateObject関数から返されるオブジェクト参照をバリアント型の変数に割り当てます.
このタイプのアプリケーションがまだ実行されていない場合、CreateObject関数はこのアプリケーションを起動してからOLEオブジェクトを作成します.OLEオブジェクトリファレンスはアプリケーションの実行時にのみ有効であり、OLEオブジェクトリファレンスを使用している間にアプリケーションが終了すると、LotusScriptは実行時エラーを放出します.各OLEオブジェクトには、独自に定義および提供されたクラスがあり、これらのクラスによってアプリケーションを操作できます.
				
 Sub Initialize 
	'  Word.Application  
	 Set MyApp = CreateObject ("Word.Application") 
	'  Visible   True 
	 MyApp.Visible = True 
 End Sub 

 
GetObject関数:
アプリケーションファイルに含まれるOLEオブジェクトを開くか、現在アクティブな指定したタイプのOLEオブジェクトを返します.
構文
GetObject ( [pathName] [ , className ] )
パラメータ
pathNameフルパスファイル名を含むアプリケーションファイルまたは空です.このアプリケーションはOLEをサポートする必要があります.空の文字列("")または省略の場合は、classNameを作成し、当期のアクティブなオブジェクトを返す必要があります.
classNameとCreateObjectのclassNameパラメータ.ただし省略できますが、省略した場合は、返されるOLEオブジェクトを決定するためにpathNameを使用します.
戻り値はOLEオブジェクトの参照を返します.
使用法とCreateObject
				
Sub Initialize
    Dim myDoc As Variant
    ' WordPro.Document 。 
    Set mydoc = getobject("d:/wordpro/docs/test.lwp","WordPro.Document")
    '  WordPro.Document  Print 。
    myDoc.Print
End Sub

 
トップに戻る
LotusScriptによるMicroSoft Excelグラフィックス・レポートの作成のポイントとテクニック
  • Excelが正常にインストールされていることを確認します.
  • VBA関連のコードを理解するには、マクロを記録することによって対応するVBAコードを生成し、生成したVBAコードの中で自分のコードに変更することができる.これにより、ある機能を完了するVBA関数を迅速に理解し、ヘルプと組み合わせて、関連する機能を完了する関数呼び出しを迅速に理解することができます.
  • LotusScriptで直接グラフを生成し、グラフのフォーマットを細かく調整するには、フォーマット調整に関連するコードが多く必要であり、後でフォーマットを調整するにもコードを変更する必要がある場合は不便です.直接にExcelでフォーマットを調整したグラフを描き、テンプレートとして保存してDominoアプリケーションに添付し、グラフを生成する必要があるときにこのExcelテーブルを解いて開き、対応するデータをExcelテーブルに書き込むことで、グラフが自動的に生成され、フォーマットを調整するのも簡単です.

  • DominoのデータでグラフィカルなExcelレポートを生成する方法を2つの例で説明します.
    最初の例:Excelで簡単な円グラフを生成し、Dominoアプリケーションに表示します.
    ExcelTestでnsfにはすでにビューExcelTestが存在し、各ドキュメントには人名と年齢の情報が含まれています.以下の図に示すように、いくつかのドキュメントが含まれています.
    図1.ビューExcelTest
    Excelファイルを作成し、A 1~G 2の長方形の領域に次のようなデータを記入し、ソースデータをA 1~G 2に設定して、他の属性を設定します.このExcelファイルはテンプレートとして、添付ファイルでこのテンプレートChart 1を見つけることができます.xls.
    図2.Chart1.xlsスクリーンショット
    ここで、Generate Chart 1というビュー操作が作成する、各年齢層(20以下、20~29,30~39,40~49,50~59,60以上)の人数の割合を統計してChart 1とする機能がある.xlsはテンプレートに対してExcel円グラフを生成し、異なるグラフを生成するには、テンプレート内のグラフのフォーマットタイプを変更して保存するだけです.コードは次のとおりです.
    インベントリ1
    				
    Sub Click(Source As Button)
        ' 
        Dim countArr(5) As Integer
        Dim s As New NotesSession
        Dim ws As New NotesUIWorkspace
        Dim db As NotesDatabase
        Set db = s.CurrentDatabase
        Dim vw As NotesView
        Set vw = db.GetView("ExcelTest")
        Dim doc As NotesDocument
        Set doc = vw.GetFirstDocument
        ' 
        While Not doc Is Nothing
            age% = Cint(doc.Age(0))
            If age%<20 Then
                countArr(0) = countArr(0) + 1
            Elseif age%>=20 And age%<30 Then
                countArr(1) = countArr(1) + 1
            Elseif age%>=30 And age%<40 Then
                countArr(2) = countArr(2) + 1
            Elseif age%>=40 And age%<50 Then
                countArr(3) = countArr(3) + 1
            Elseif age%>=50 And age%<60 Then
                countArr(4) = countArr(4) + 1
            Else            
                countArr(5) = countArr(5) + 1
            End If
            Set doc = vw.GetNextDocument(doc)
        Wend
        ' Excel 
        Call generateExcelChart1(countArr, "C:/Chart1.xls")
        
        Dim uiChartDoc As NotesUIDocument
        Set uiChartDoc = ws.ComposeDocument( "", "", "Chart" )
        uiChartDoc.GotoField("Body")
        ' Excel 
        Call uiChartDoc.Paste
    End Sub
    

     
    Excelチャートを生成するプロセスgenerateExcelChart 1()コードは次のとおりです.
    インベントリ2
    				
    Sub generateExcelChart1(countArr As Variant, excelFileName As String)
        ' Excel 
        Dim excelApplication As Variant
        Dim excelWorkbook As Variant
        Dim excelSheet As Variant
        ' Excel 
        Set excelApplication = CreateObject("Excel.Application")    
        ' Excel 
        excelApplication.Visible = False
        ' 
        Set excelWorkbook = excelApplication.Workbooks.Open(excelFileName)
        Set excelSheet = excelWorkbook.Worksheets("Sheet1")
        ' 
        excelSheet.Cells(2,2) = countArr(0)
        excelSheet.Cells(2,3) = countArr(1)
        excelSheet.Cells(2,4) = countArr(2)
        excelSheet.Cells(2,5) = countArr(3)
        excelSheet.Cells(2,6) = countArr(4)
        excelSheet.Cells(2,7) = countArr(5)
        ' 
        excelSheet.ChartObjects(1).Chart.ChartArea.Copy
        ' Excel 
        excelWorkbook.Close False
        excelApplication.Quit
    End Sub
    

     
    ビューExcelTest 1でGenerate Chart 1をクリックすると、Notesで次のような円グラフが生成されます.
    図3.生成された円グラフ
    上記の例では、年齢層は固定的にいくつかの種類に分けられているので、Excelテンプレートで直接書くことができ、円グラフのデータソースを直接選択することができます.この分類がダイナミックであれば、上記の方法はできません.この場合、プログラムでExcelグラフのプロパティを設定する必要があります.
    2つ目の例:動的に分類されたグラフをExcelで生成し、Dominoアプリケーションに表示します.
    この例では、中国語の姓の数を統計し、統計グラフを生成します.
    Excelファイルを作成し、次の図のようにフォント、色などのプロパティを設定する図を作成します.このExcelファイルはテンプレートとして、添付ファイルでこのテンプレートChart 2を見つけることができます.xls.
    図4.Excel図
    まだExcelTestです.nsfのビューExcelTestでは、Dominoの個人情報に基づいて姓の分布を統計し、統計グラフを生成するビュー操作名Generate Chart 2を作成します.コードは次のとおりです.
    インベントリ3
    				
    Sub Click(Source As Button)
        ' list 
        Dim nameList List As Integer
        Dim s As New NotesSession
        Dim ws As New NotesUIWorkspace
        Dim db As NotesDatabase
        Set db = s.CurrentDatabase
        Dim vw As NotesView
        Set vw = db.GetView("ExcelTest")
        Dim doc As NotesDocument
        Set doc = vw.GetFirstDocument
        ' 
        While Not doc Is Nothing
            sName$ = Left(doc.Name(0), 1)
            If Iselement (namelist(sName$)) Then
                nameList(sName$) = nameList(sName$) + 1
            Else
                nameList(sName$) = 1
            End If
            Set doc = vw.GetNextDocument(doc)
        Wend
        ' Excel 
        Call generateExcelChart2(nameList, "C:/Chart2.xls")
        
        Dim uiChartDoc As NotesUIDocument
        Set uiChartDoc = ws.ComposeDocument( "", "", "Chart" )
        uiChartDoc.GotoField("Body")
        ' Excel 
        Call uiChartDoc.Paste
    End Sub
    

     
    Excelチャートを生成するプロセスgenerateExcelChart 1()コードは次のとおりです.
    インベントリ4
    				
    Sub generateExcelChart2(nameList As Variant, excelFileName As String)
        ' Excel 
        Dim excelApplication As Variant
        Dim excelWorkbook As Variant
        Dim excelSheet As Variant
        ' Excel 
        Set excelApplication = CreateObject("Excel.Application")    
        ' Excel 
        excelApplication.Visible = False
        ' 
        Set excelWorkbook = excelApplication.Workbooks.Open(excelFileName)
        Set excelSheet = excelWorkbook.Worksheets("Sheet1")
        ' 
        excelSheet.Cells(2,1) = " "
        i% = 2
        Forall counter In nameList
            sName$ = Listtag(counter)
            excelSheet.Cells(1,i%) = sName$
            excelSheet.Cells(2,i%) = counter
            i% = i% + 1
        End Forall
        ' 
        Call excelSheet.ChartObjects("Chart 1").Chart.SetSourceData(
            excelSheet.Range(excelSheet.Cells(1, 1), excelSheet.Cells(2, i%)), 1)
        ' 
        excelSheet.ChartObjects(1).Chart.ChartArea.Copy
        ' Excel 
        excelWorkbook.Close False
        excelApplication.Quit
    End Sub
    

     
    ビューExcelTest 1でGenerate Chart 2操作をクリックすると、Notesで次のグラフが生成され、Excelはバックグラウンドで実行されます.この操作がExcelに関連していることは、プロセス全体でユーザーにはわかりません.
    図5.Notesで生成されたExcel図
    トップに戻る
    小結
    通常、上記の2つの例では、LotusScriptを利用してDominoのデータでグラフィックス化されたExcelレポートを生成することは簡単であることがわかります.これにより、ExcelがDominoにシームレスに統合され、Excelの強力なレポート機能がDominoプログラムに使用されるようになります.これはDomino自身のレポート機能が強くないことに大きな補完であり、この方法により、多くの機能の強力なレポートプログラムを簡単に開発することができます.