サーバー側のグラフ作成機能を使用してグラフを動的に生成する方法

概要

Microsoft Office のグラフ Web コンポーネントは、フォーム上に COM (Component Object Model) コントロールとして配置して使用する以外に、不可視のメモリ内オブジェクトとして使用することもできます。この資料では、グラフ Web コンポーネントをサーバー上で使用し、グラフを GIF (Graphics Interchange Format) 画像の形式で作成する方法について説明します。この資料で説明する方法を使用すると、インターネットや、さまざまなクライアント デスクトップが混在するエンタープライズ環境で使用できるグラフの画像を作成できます。

詳細

グラフ Web コンポーネントでは、配列、データベース、スプレッドシート、独自のデータ ソースなど、さまざまなソースからのデータを使用してグラフを作成することができます。グラフを作成したら、グラフ コンポーネントの ExportPicture メソッドを使用することによって、グラフの GIF 画像を生成することができます。


これを行うには、global.asa ファイルを編集し、以下の手順に示されているコードを含む ASP ページを作成します。

プロジェクトの作成手順

  1. Microsoft Visual InterDev を起動します。
  2. ServerChart という名前で新しい Web プロジェクトを作成し、[次へ] をクリックします。
  3. この Web プロジェクトで使用するサーバーを指定します。
  4. [完了] をクリックして Web プロジェクトを作成します。
  5. サーバー上のプロジェクト ディレクトリ (通常は C:\Inetpub\wwwroot\ServerChart) を右クリックし、[プロパティ] をクリックします。次に、[セキュリティ] タブをクリックします。
  6. [アクセス許可] をクリックし、次のディレクトリのアクセス許可を追加します。
    IUSR_SERVERNAME : 読み取り、書き込み、実行、削除

    Creator : 読み取り、書き込み、実行、削除
  7. [OK] をクリックしてアクセス許可を設定します。
  8. Visual InterDev プロジェクトで、global.asa ファイルを右クリックし、[作業コピーの取得] をクリックします。
  9. global.asa ファイルに以下のスクリプトを追加します。
    <SCRIPT LANGUAGE=VBScript RUNAT=Server>

    Sub Session_OnStart
    ' Create a FileSystemObject to provide files in the script
    Set Session("FSO") = CreateObject("Scripting.FileSystemObject")

    ' Create a variable that has the number of files created in this session
    Session("n") = 0

    ' Set timeout to be 1 minute
    Session.Timeout = 1
    End Sub

    Sub Session_OnEnd
    ' Delete the files created in this session
    Dim x
    For x = 0 to Session("n")-1
    Session("FSO").DeleteFile Session("sTempFile" & x), True
    Next
    End Sub
    </SCRIPT>
  10. [プロジェクト] メニューの [Web アイテムの追加] をポイントし、[アクティブ サーバー ページ] をクリックします。ページの名前を chart.asp とします。
  11. chart.asp に以下のスクリプトを追加します。
    <%@ language="vbscript" %>
    <html>
    <body>
    <h1>Realtime CPU Utilization by Configurations</h1>

    <FORM action="chart.asp" method=get name=frmChooseOrg>

    <p> Select an Organization to see values for their machines:

    <SELECT name=sOrg>
    <OPTION SELECTED value= 5>Org1</OPTION>
    <OPTION value= 10>Org2</OPTION>
    <OPTION value= 15>Org3</OPTION>

    <OPTION value= 20>Org4</OPTION>
    </SELECT>

    <INPUT type="submit" value="Go"></p>

    </FORM>

    <%

    Dim oChart, c, Categories(5), Vals(5), i, sCaption, nData, nOrg

    ' Get the input value
    nData = Request.QueryString("sOrg")

    'When the page loads the first time, set ndata to 5
    if len(nData) = 0 then nData = 5

    ' Generate random categories and values for the chart
    ' These values can come from some existing data source
    for i = 1 to 5
    Categories(i) = "Machine" & CStr(i)
    Vals(i) = nData * Rnd(100)
    next

    ' Create a Chart Object
    Set oChart = CreateObject("OWC.Chart")
    Set c = oChart.Constants

    ' Set the different parameters for the ChartSpace
    oChart.Border.Color = c.chColorNone

    ' Get Organization number and use it to set the Caption
    nOrg = nData/5
    sCaption = "Current Utilizations for Org"
    sCaption = sCaption & CStr(nOrg)

    ' Add a chart and set parameters for the chart
    oChart.Charts.Add
    oChart.Charts(0).Type = oChart.Constants.chChartTypeColumnClustered
    oChart.Charts(0).SeriesCollection.Add
    oChart.Charts(0).SeriesCollection(0).Caption = sCaption
    oChart.Charts(0).SeriesCollection(0).SetData c.chDimCategories, c.chDataLiteral, Categories
    oChart.Charts(0).SeriesCollection(0).SetData c.chDimValues, c.chDataLiteral, Vals
    oChart.Charts(0).HasLegend = True
    oChart.Charts(0).HasTitle = True

    ' Get a temporary filename to save chart in that file
    sFname = Session("FSO").GetTempName & session.SessionID & ".gif"

    ' Export the chart to the temporary file
    oChart.ExportPicture server.MapPath(sFname), "gif", 600, 512

    ' Create a link to the generated file
    Response.Write "<img src='" & sFname & "'>"

    ' Store the file with its path in the session object for cleanup
    Session("sTempFile" & Session("n")) = Server.MapPath(sFname)

    ' Increment the number of files
    Session("n") = Session("n") + 1

    %>

    </body>
    </html>
  12. プロジェクトを保存します。
  13. プロジェクト エクスプローラで chart.asp を右クリックし、[ブラウザで表示] をクリックします。
さまざまなコンピュータの CPU 使用率を示すグラフがページに表示されます。別の組織を選択すると、別の使用率が表示されます。


複数の異なるデータ集合を使用して複数のグラフを作成する場合は、それぞれのグラフに対して GIF ファイルを作成する必要があります。このサンプルでは、スクリプティング ランタイム ライブラリの FileSystemObject を使用して GIF 画像の一時ファイルを作成しています。このファイルは ASP ページと同じフォルダに保存されるので、Session オブジェクトの MapPath メソッドを使用して一時ファイルの場所を参照できます。ファイル名はセッション変数として保存されるので、セッションの終了時に自動的に削除されます。


IIS では、セッションがタイムアウトになると、必ず Session_OnEnd サブルーチンが実行されることに注意してください。セッションは、一定の時間内にクライアントからページが要求されなかった場合にタイムアウトします。タイムアウトの時間は、セッションの開始時に 1 分間に設定されます。

その他の注意点

現時点で、ExportPicture メソッドで使用できるフィルタは "GIF" 画像用のフィルタのみです。


ExportPicture メソッドには 2 つの引数を指定できます。引数では、生成するグラフのサイズをピクセル単位で指定します。この資料のサンプル コードでは、高さと幅をハード コーディングしています。このようにせずに、高さと幅をクライアントが指定できるようにすることもできます。


OWC.Chart ProgID は Office Web コンポーネント 9.0 に適用されます。バージョン 10 のコンポーネントを使用する場合は、ProgID を OWC.Chart から OWC10.ChartSpace に変更します。バージョン 11 のコンポーネントを使用する場合は、ProgID を OWC.Chart から OWC11.ChartSpace に変更します。

サーバー側で使用する場合の問題点

Office 2000 Web コンポーネントはサーバー側での使用を想定して設計されていません。多数のユーザー接続が同時に発生するサーバー環境で Office 2000 Web コンポーネントを使用すると、問題が発生する可能性があります。これらの問題の多くは Office XP Web コンポーネントおよび Office 2003 Web コンポーネントで対処されているため、大規模なサーバー側のソリューションを構築する場合は Office XP Web コンポーネントまたは Office 2003 Web コンポーネントの使用をお勧めします。


関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
317316
[INFO] Office 2000 Web コンポーネントをサーバー側で使用する場合の制約事項

関連情報

『Programming Microsoft Office Web Components』Dave Stearns 著、ISBN: 0-7356-0794-X


グラフ Web コンポーネントの使用の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
240263
[HOWTO] グラフ Web コンポーネントで複合グラフを作成する方法
235885 Visual Basic を使用して Office のグラフ Web コンポーネントを使用する方法
243192
[HOWTO] VBScript を使用してグラフをスプレッドシート コンポーネントに連結する
プロパティ

文書番号:244049 - 最終更新日: 2005/10/19 - リビジョン: 1

フィードバック