現在オフラインです。再接続するためにインターネットの接続を待っています

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

Office 2003 のサポートは終了しました

マイクロソフトでは、2014 年 4 月 8 日に Office 2003 のサポートを終了しました。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

概要
この資料では、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.EndFunction 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 = aOrderInfoEnd FunctionFunction GetProductIDs()    ReDim aPIDs(NumProds, 1)    For r = 0 To NumProds-1        aPIDs(r, 0) = r+1    Next    GetProductIDs = aPIDsEnd 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 コンポーネントのトピックを参照してください。関連情報を参照するには、以下の「サポート技術情報」 (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 - 最終更新日: 09/20/2005 10:02:00 - リビジョン: 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
フィードバック