[OFF2003] ASP を使用してクライアント側で表示する XML スプレッドシートを作成する方法

文書翻訳 文書翻訳
文書番号: 288130 - 対象製品
すべて展開する | すべて折りたたむ

概要

この資料では、Office スプレッドシート コンポーネントを使用して XML スプレッドシート (XMLSS) 形式のスプレッドシートを作成する Active Server Pages (ASP) スクリプトについて説明します。XMLSS は以下のいずれかの方法で、クライアント側で表示できます。
  • スプレッドシート コンポーネントで Web ページに表示。
  • ブラウザ内に Microsoft Excel で表示。
  • Microsoft Excel で直接開く。

詳細

サーバー側のコードでスプレッドシート コンポーネントを使用してスプレッドシートを作成すると、Microsoft Excel のサーバーサイド オートメーションを使用するよりも、高い拡張性とパフォーマンスが得られます。マイクロソフトでは、Excel を含む Office アプリケーションのサーバーでのオートメーションの使用は推奨していません。他の方法で同じ結果が得られる場合は、サーバーサイド オートメーションの使用は避けてください。XMLSS ではスプレッドシート コンポーネントと Microsoft Excel に共通する多くの機能が維持されます。マルチシート ブック、セルの書式、オートフィルタ、セルの数式、再計算などはその例です。スプレッドシート コンポーネントには Microsoft Excel のオブジェクト モデルとほぼ一致するオブジェクト モデルがあります。したがって、Excel のオブジェクト モデルに習熟している場合は、既存の Excel コードを修正して、スプレッドシート コンポーネントで使用することができます。

以下のサンプルでは、ASP でスプレッドシート コンポーネントを使用して、XMLSS のマルチシート ブックを作成する方法を示します。また、生成された XMLSS をクライアント側で Web ページあるいは Microsoft Excel で表示する方法を説明します。

スプレッドシート コンポーネントを使用して XMLSS を作成するための ASP スクリプト

Web サーバーの仮想ルート ディレクトリに、次の ASP を XMLSS.asp として保存します (デフォルトのルート ディレクトリは c:\inetpub\wwwroot です)。
<% Language=VBScript %>

<%
    Response.Buffer = True
    Response.ContentType = "text/xml"

    Dim NumOrders, NumProds, r
    NumOrders = 300
    NumProds = 10
        
    Dim oSS
    Dim oOrdersSheet
    Dim oTotalsSheet
    Dim oRange
    Dim c
    
    Set oSS = CreateObject("OWC10.Spreadsheet")
    Set c = oSS.Constants

    'Rename Sheet1 to "Orders", rename Sheet2 to "Totals" and remove Sheet3
    Set oOrdersSheet = oSS.Worksheets(1)
    oOrdersSheet.Name = "Orders"
    Set oTotalsSheet = oSS.Worksheets(2)
    oTotalsSheet.Name = "Totals"
    oSS.Worksheets(3).Delete
    
    '=== Build the First Worksheet (Orders) ==============================================
        
    'Add headings to A1:F1 of the Orders worksheet and apply formatting
    Set oRange = oOrdersSheet.Range("A1:F1")
    oRange.Value = Array("Order Number", "Product ID", "Quantity", "Price", "Discount", "Total")
    oRange.Font.Bold = True
    oRange.Interior.Color = "Silver"
    oRange.Borders(c.xlEdgeBottom).Weight = c.xlThick
    oRange.HorizontalAlignment = c.xlHAlignCenter
   
    'Apply formatting to the columns
    oOrdersSheet.Range("A:A").ColumnWidth = 20
    oOrdersSheet.Range("B:E").ColumnWidth = 15
    oOrdersSheet.Range("F:F").ColumnWidth = 20
    oOrdersSheet.Range("A2:E" & NumOrders + 1 _
        ).HorizontalAlignment = c.xlHAlignCenter
    oOrdersSheet.Range("D2:D" & NumOrders + 1).NumberFormat = "0.00"
    oOrdersSheet.Range("E2:E" & NumOrders + 1).NumberFormat = "0 % "
    oOrdersSheet.Range("F2:F" & NumOrders + 1).NumberFormat = "$ 0.00" '"_($* #,##0.00_)"
        
    'Obtain the order information for the first five columns in the Orders worksheet
    'and populate the worksheet with that data starting at row 2
    Dim aOrderData
    aOrderData = GetOrderInfo
    oOrdersSheet.Range("A2:E" & NumOrders + 1).Value = aOrderData
    
    'Add a formula to calculate the order total for each row and format the column
    oOrdersSheet.Range("F2:F" & NumOrders + 1).Formula = "=C2*D2*(1-E2)"
        oOrdersSheet.Range("F2:F" & NumOrders + 1).NumberFormat = "_(  $* #,##0.00   _)"

    'Apply a border to the used rows
    oOrdersSheet.UsedRange.Borders(c.xlInsideHorizontal).Weight = c.xlThin
    oOrdersSheet.UsedRange.BorderAround , c.xlThin, 15
    
    'Turn on AutoFilter and display an initial criteria where
    'the Product ID (column 2) is equal to 5
    oOrdersSheet.UsedRange.AutoFilter
    oOrdersSheet.AutoFilter.Filters(2).Criteria.FilterFunction = c.ssFilterFunctionInclude
    oOrdersSheet.AutoFilter.Filters(2).Criteria.Add "5"
    oOrdersSheet.AutoFilter.Apply
    
    'Add a Subtotal at the end of the usedrange
    oOrdersSheet.Range("F" & NumOrders + 3).Formula = "=SUBTOTAL(9, F2:F" & NumOrders + 1 & ")"
    
    'Apply window settings for the Orders worksheet
    oOrdersSheet.Activate   'Makes the Orders sheet active
    oSS.Windows(1).ViewableRange = oOrdersSheet.UsedRange.Address
    oSS.Windows(1).DisplayRowHeadings = False
    oSS.Windows(1).DisplayColumnHeadings = False
    oSS.Windows(1).FreezePanes = True
    oSS.Windows(1).DisplayGridlines = False
    
    '=== Build the Second Worksheet (Totals) ===========================================
    
    'Change the Column headings and hide row headings
    oTotalsSheet.Activate
    oSS.Windows(1).ColumnHeadings(1).Caption = "Product ID"
    oSS.Windows(1).ColumnHeadings(2).Caption = "Total"
    oSS.Windows(1).DisplayRowHeadings = False
    
    'Add the product IDs to column 1
    Dim aProductIDs
    aProductIDs = GetProductIDs
    oTotalsSheet.Range("A1:A" & NumProds).Value = aProductIDs
    oTotalsSheet.Range("A1:A" & NumProds).HorizontalAlignment = c.xlHAlignCenter

    'Add a formula to column 2 that computes totals per product from the Orders Sheet
    oTotalsSheet.Range("B1:B" & NumProds).Formula = _
        "=SUMIF(Orders!B$2:B$" & NumOrders + 1 & ",A1,Orders!F$2:F$" & NumOrders + 1 & ")"
    oTotalsSheet.Range("B1:B" & NumProds).NumberFormat = "_(  $* #,##0.00   _)"

    'Apply window settings for the Totals worksheet
    oSS.Windows(1).ViewableRange = oTotalsSheet.UsedRange.Address
    
    '=== Setup for final presentation ==================================================
    
    oSS.DisplayToolbar = False
    oSS.AutoFit = True
    oOrdersSheet.Activate

    Response.Write oSS.XMLData
    Response.End


Function GetOrderInfo()
    ReDim aOrderInfo(NumOrders,5)
    Dim aPrice, aDisc
    aPrice = Array(10.25, 9.5, 2.34, 6.57, 9.87, 4.55, 6, 13.05, 3.3, 5.5)
    aDisc = Array(0, 0.1, 0.15, 0.2)
    For r = 0 To NumOrders-1
        aOrderInfo(r, 0) = "'" & String(7-Len(CStr(r+1)), "0") & r+1 'Col 1 is Order Number
        aOrderInfo(r, 1) = Int(Rnd() * NumProds) + 1                 'Col 2 is Product ID
        aOrderInfo(r, 2) = Int(Rnd() * 20) + 1                       'Col 3 is Quantity
        aOrderInfo(r, 3) = aPrice(aOrderInfo(r, 1)-1)                'Col 4 is Price
        aOrderInfo(r, 4) = aDisc(Int(Rnd() * 4))                     'Col 5 is Discount
    Next
    GetOrderInfo = aOrderInfo
End Function

Function GetProductIDs()
    ReDim aPIDs(NumProds, 1)
    For r = 0 To NumProds-1
        aPIDs(r, 0) = r+1
    Next
    GetProductIDs = aPIDs
End Function

%>
				

XMLSS を Web ページに表示

サンプルの XMLSS を Web ページに表示するには、次のように、スプレッドシート コンポーネントの XMLURL プロパティを ASP の URL に設定するだけです。
<html>

<body>

<object classid="clsid:0002E551-0000-0000-C000-000000000046" id="Spreadsheet1">
  <param name="XMLURL" value="http://YourWebServer/xmlss.asp">
</object>

</body>

</html>
				

: Office 2003 を使用している場合、上記のコードの classid の変更が必要なことがあります。

上記の HTML では、XMLURL プロパティは <param> タグを使用して設定されます。次のように、必要に応じて XMLURL プロパティを実行時に設定することもできます。
   Spreadsheet1.XMLURL = "http://YourWebServer/xmlss.asp"
				

XMLSS を Microsoft Excel で表示

スプレッドシート コンポーネントで作成した XMLSS を Microsoft Excel で開くことができます。スプレッドシート コンポーネントで実装した書式と機能は、Microsoft Excel で共有されます。スプレッドシート コンポーネントでサポートされていて、Excel ではサポートされていない (またはその逆の) 機能がいくつかあります。Excel で実装されていない XML タグまたは属性は、XMLSS を開く際に無視されます。

サンプル ASP スクリプトの結果を Microsoft Excel で表示するには、次の手順を実行します。
  1. Microsoft Excel を起動します。
  2. [ファイル] メニューの [開く] をクリックします。
  3. [ファイル名] ボックスに http://YourWebServer/xmlss.asp と入力し、[開く] をクリックします。
ブックを調べて、実行時に適用されたデータと書式がすべて、Excel で開いたブックに保持されていることを確認します。唯一の例外として、スプレッドシート コンポーネントで作成された見出しの標題は Excel では表示されません。これはスプレッドシート コンポーネントの機能で、Excel ではサポートしていないためです。XMLSS をスプレッドシート コンポーネントで作成して Excel で表示する場合は、それぞれがサポートしている機能の相違に注意してください。

ASP で作成された XMLSS を Microsoft Excel で開くもう 1 つの方法は、Excel の Multipurpose Internet Mail Extensions (MIME) の種類を ASP の ContentType に指定することです。以下の手順により、Excel の MIME の種類を指定して ASP を参照すると、XMLSS がブラウザ内に Excel で表示されます。
  1. XMLSS.asp をテキスト エディタで開きます。
  2. スクリプトの次の行を見つけます。
    Response.ContentType = "text/xml"
    					
    次のように変更します。
    Response.ContentType = "application/vnd.ms-excel"
    					
  3. 変更を XMLSS.asp に保存し、Internet Explorer (IE) を起動します。
  4. http://YourWebServer/XMLSS.asp を参照します。XML スプレッドシートがブラウザ内に Excel で表示されます。

関連情報

詳細については、次のマイクロソフト Web サイトで Office Web コンポーネントのトピックを参照してください。
http://support.microsoft.com/ofd
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
285891 [XL2003] [HOWTO] Visual Basic または ASP を使用して Excel 2002/2003 用の XML スプレッドシートを作成する方法
278976 サーバー側で使用するために XSL を使用して Excel XML スプレッドシートを変換する方法
257757 [OFF2003] [INFO] Office のサーバーサイド オートメーションについて

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 288130 (最終更新日 2005-08-23) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。

プロパティ

文書番号: 288130 - 最終更新日: 2005年9月20日 - リビジョン: 4.2
この資料は以下の製品について記述したものです。
  • Microsoft Office Web コンポーネント
  • Microsoft Office Web コンポーネント
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Active Server Pages 4.0
キーワード:?
kbhowto kbofficewebspread KB288130
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com