Visual Basic または ASP を使用して Excel 2002/2003 用の XML スプレッドシートを作成する方法

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

概要

Microsoft Excel 2002 および Microsoft Office Excel 2003 では、XML 形式がサポートされており、ブック (または XML スプレッドシート) の読み込みと保存の両方が可能です。この XML スプレッドシート形式を使用することにより、オートメーションを使用せずに、Excel で複数シートの書式設定されたブックを作成できます。この方法は、Excel を自動化できない (Web サーバー上またはサービスから処理を実行する場合など)、またはコードを実行するシステムに Excel がインストールされていない環境で Excel ブックを作成する必要がある場合に有効な方法です。

この資料では、XSL (拡張スタイルシート言語) 変換と併用することで、Excel から直接開くことができる書式設定されたブックを生成する XML テンプレートの作成方法について説明します。Active Server Pages (ASP) と Visual Basic の両方の XML 変換の例を示します。Visual Basic のサンプル コードでは、XML/XSL でのみスプレッドシート データを生成し、結果を Excel で開くために最小限のオートメーションを使用します。

: この資料に記載されているサンプル コードはダウンロードすることができます。ダウンロード方法については、この資料の最後にある「ダウンロード」を参照してください。

詳細

ブック用の XML テンプレートを作成する

  1. C:\ExcelXML という新規フォルダを作成します。
  2. Excel で新しいブックを作成します。ブックのセル A1:F2 に以下のデータを追加します。セル F2 は数式として入力します。
    A1: Order ID    B1: Product ID   C1: Unit Price   D1: Quantity   E1: Discount  F1: Total
    A2: aaa         B2: 111          C2: 222          D2: 333        E2: 0         F2: =C2*D2*(1-E2)
  3. セル F3 に次の数式を入力します。
    =SUM(F$2:F2)
  4. セル A1:F1 を選択します。[書式] メニューの [セル] をクリックします。太字、下罫線、およびセルの網掛けに任意の単色を適用し、[OK] をクリックします。
  5. 列 A から列 F までを選択します。[書式] メニューの [列] をポイントし、[幅] をクリックします。新しい列の幅として 15 と入力し、[OK] をクリックします。列 A から列 F までが選択された状態で、[書式] メニューの [セル] をクリックします。[配置] タブで [横位置] ボックスの一覧の [中央揃え] をクリックし、[OK] をクリックします。
  6. 列 E を選択します。[書式] メニューの [セル] をクリックします。[表示形式] タブで [パーセンテージ] をクリックし、小数点以下の桁数を 0 に設定して、[OK] をクリックします。
  7. 列 F を選択します。[書式] メニューの [セル] をクリックします。[表示形式] タブで [会計] をクリックし、[OK] をクリックします。
  8. セル A3:F3 を選択します。[書式] メニューの [行] をポイントし、[高さ] をクリックします。[行の高さ] ボックスに 25 と入力し、[OK] をクリックします。セル A3:F3 が選択された状態で、[書式] メニューの [セル] をクリックします。これらのセルに上罫線を適用し、[OK] をクリックします。
  9. [ツール] メニューの [オプション] をクリックします。[表示] タブの [枠線] チェック ボックスをオフにし、[OK] をクリックします。
  10. 行 2 を選択します。[ウィンドウ] メニューの [ウィンドウ枠の固定] をクリックします。
  11. セル A1 を選択します。
  12. [ファイル] メニューの [名前を付けて保存] をクリックします。上の手順で作成した C:\ExcelXML フォルダに移動し、[XML スプレッドシート] 形式で "Orders.xsl" という名前でブックを保存します。

    : [名前を付けて保存] ダイアログ ボックスの [ファイル名] ボックスでは、ファイル名に .xml 拡張子が追加されないように、ファイル名を二重引用符で囲んで入力します。
  13. Excel を終了します。
  14. メモ帳などのテキスト エディタで Orders.xsl を開きます。
  15. <?xml version="1.0"?> タグと <Workbook> タグの間に以下のコードを挿入します。
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
    <xsl:template match="/">
    <xsl:pi name="xml">version="1.0"</xsl:pi>
    					
  16. Orders.xsl ファイルの最後に、以下の 2 行を追加します。
    </xsl:template>
    </xsl:stylesheet>
    					
  17. Orders.xsl 内で以下の一連のタグを探します (これらのタグはワークシート上のセル A2:F2 を表します)。
       <Row ss:Height="14.25">
        <Cell><Data ss:Type="String">aaa</Data></Cell>
        <Cell><Data ss:Type="Number">111</Data></Cell>
        <Cell><Data ss:Type="Number">222</Data></Cell>
        <Cell><Data ss:Type="Number">333</Data></Cell>
        <Cell><Data ss:Type="Number">0</Data></Cell>
        <Cell ss:Formula="=RC[-3]*RC[-2]*1*(1-RC[-1])"><Data ss:Type="Number">73926</Data></Cell>
       </Row>
    					
    上のコードを以下の XSL コードに置き換えます。
    <xsl:for-each select="xml/rs:data/z:row">
       <Row ss:AutoFitHeight="0" ss:Height="13.5">
        <Cell><Data ss:Type="String"><xsl:value-of select="@OrderID"/></Data></Cell>
        <Cell><Data ss:Type="Number"><xsl:value-of select="@ProductID"/></Data></Cell>
        <Cell><Data ss:Type="Number"><xsl:value-of select="@UnitPrice"/></Data></Cell>
        <Cell><Data ss:Type="Number"><xsl:value-of select="@Quantity"/></Data></Cell>
        <Cell><Data ss:Type="Number"><xsl:value-of select="@Discount"/></Data></Cell>
        <Cell ss:Formula="=RC[-3]*RC[-2]*(1-RC[-1])"><Data ss:Type="Number">0</Data></Cell>
       </Row>
    </xsl:for-each>
    					
  18. Orders.xsl に対する変更を保存してからファイルを閉じます。

Visual Basic を使用して XML 形式で保存した ADO レコードセットを XML スプレッドシートに変換する

  1. Visual Basic で標準 EXE プロジェクトを新規作成します。
  2. [プロジェクト] メニューの [参照設定] をクリックします。Microsoft ActiveX Data Object 2.5 (またはそれ以降) および Microsoft XML 3.0 のタイプ ライブラリを選択します。
  3. Form1 にコマンド ボタンを追加し、そのボタンの Click イベントに以下のコードを追加します。
        Const sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                      "C:\program files\microsoft office\office10\samples\Northwind.mdb"
        Const sOutXML = "C:\ExcelXML\Orders.xml"
        Const sXSL = "C:\ExcelXML\Orders.xsl"
        
        'Retrieve an ADO recordset of the Orders Detail table in Northwind.
        Dim nRecords As Long, nFields As Long
        Dim rs As New ADODB.Recordset
        rs.Open "SELECT * FROM [Order Details]", sConn, adOpenStatic, adLockOptimistic
            
        'Persist the recordset to a new DOMDocument and store the record count.
        Dim oXML As New DOMDocument
        rs.Save oXML, adPersistXML
        nRecords = rs.RecordCount
        nFields = rs.Fields.Count
        rs.Close
          
        'Load the XSL (the workbook template with XSL directives) into a DOMDocument.
        Dim oXSL As New DOMDocument
        oXSL.Load sXSL
        
        'Transform the XML using the style sheet.
        Dim oResults As New DOMDocument
        oXML.transformNodeToObject oXSL, oResults
        
        If oXSL.parseError.errorCode <> 0 Then
            MsgBox "Parse Error: " & oResults.parseError.reason
        Else
           'Modify the ss:ExpandedRowCount attribute for the <table> node to
           'indicate the correct number of rows (count of records + 1 row for
           'the header + 1 row for the total).
            Dim oTable As MSXML2.IXMLDOMElement
            Set oTable = oResults.selectSingleNode("Workbook/Worksheet/Table")
            oTable.setAttribute "ss:ExpandedRowCount", nRecords + 2
    
            '***************************************
            'Save the results to a file.
            Open sOutXML For Output As #1
            Print #1, oResults.xml
            Close #1
    
            'Open the XML in Excel.
            Dim oExcel As Object
            Set oExcel = CreateObject("Excel.Application")
            oExcel.Workbooks.Open sOutXML
            oExcel.Visible = True
            oExcel.UserControl = True
            '***************************************
        End If
    					
    : Access のサンプル データベース Northwind がインストールされている場所に応じて、接続文字列 (Const sConn) のパスを変更してください。
  4. F5 キーを押してプログラムを実行します。
  5. Form1 のボタンをクリックします。作成した Excel ブック テンプレートで Northwind データベースの [Order Details] テーブルのデータが表示されます。
上のサンプル コードでは、XML スプレッドシートを生成し、Workbooks コレクションの Open メソッドを使用して、作成した XML スプレッドシートを Excel で自動的に新規ブックとして開きます。別の方法としては、XML を既存のワークシートの特定のセルに直接挿入する方法があります。この場合、上のコードのアスタリスクで囲まれた部分を以下のコードに置き換えます。
        'Display the data in a workbook starting at cell B2.
        Dim oExcel As Object, oBook As Object
        Set oExcel = CreateObject("Excel.Application")
        Set oBook = oExcel.Workbooks.Add
        oBook.Worksheets(1).Range("B2").Resize(nRecords + 2, nFields + 1).Value(11) = _
            oResults.xml 'Note: xlRangeValueXMLSpreadsheet=11
        oExcel.Visible = True
        oExcel.UserControl = True
				
変更後、再度プログラムを実行します。コードの変更により、新しいブックの最初のワークシートのセル B2 から始まる範囲に XML スプレッドシートのデータが挿入されます。セルのデータと書式はセル範囲に適用されますが、この方法を使用すると、行、列、ワークシート、およびブックに固有の設定は保持されません。

ASP を使用して XML 形式で保存した ADO レコードセットを XML スプレッドシートに変換する

  1. 以下のコードをメモ帳に貼り付けます。このコードを Web サーバーの仮想ルート フォルダに ExcelXML.asp という名前で保存します。

    : デフォルトの仮想ルート フォルダは C:\inetpub\wwwroot です。
    <%@ Language="vbscript"%>
    
    <%
    
        Const sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\program files\microsoft office\office10\samples\Northwind.mdb"
        Const sXSL = "C:\ExcelXML\Orders.xsl"
        
        Response.Buffer = True
    
        'Retrieve an ADO recordset of the Orders Detail table in Northwind.
        Dim rs, nRecords
        Set rs = CreateObject("ADODB.Recordset")
        rs.Open "SELECT * FROM [Order Details]", sConn, 3, 3
            
        'Persist the recordset to a new DOMDocument and store the record count.
        Dim oXML
        Set oXML = CreateObject("Microsoft.XMLDOM")
        rs.Save oXML, 1
        nRecords = rs.RecordCount
        rs.Close
          
        'Load the XSL (the workbook template with XSL directives) into a DOMDocument.
        Dim oXSL
        Set oXSL = CreateObject("Microsoft.XMLDOM")
        oXSL.Load sXSL
        
        'Transform the XML using the style sheet.
        Dim oResults
        Set oResults = CreateObject("Microsoft.XMLDOM")
        oXML.transformNodeToObject oXSL, oResults
        
        If oXSL.parseError.errorCode <> 0 Then
           Response.Write "Parse Error: " & oResults.parseError.reason
        Else
    
           'Modify the ss:ExpandedRowCount attribute for the <table> node in the XSL.
            Dim oTable
            Set oTable = oResults.selectSingleNode("Workbook/Worksheet/Table")
            oTable.setAttribute "ss:ExpandedRowCount", nRecords + 2
    
            'Return the resulting XML Spreadsheet for display in Excel.
            Response.ContentType = "application/vnd.ms-excel"
            Response.Charset = "ISO-8859-1"
            Response.Write oResults.XML
            Response.Flush
    
        End If
    
    %>
    					
    : Access のサンプル データベース Northwind がインストールされている場所に応じて、接続文字列 (Const sConn) のパスを変更してください。

  2. Internet Explorer を起動し、http://YourWebServer/ExcelXML.asp を参照します。YourWebServer は使用している Web サーバーの名前です。作成した Excel ブック テンプレートに、Northwind データベースの [受注明細] テーブルのデータが表示されます。

その他の注意点

以下の Excel の機能は XML スプレッドシート形式では保存できません。
  • グラフ
  • OLE オブジェクト
  • 描画オブジェクトまたはオートシェイプ
  • VBA プロジェクト
  • グループとアウトライン

ダウンロード

XMLSpread.exe には、この資料に記載されている XML スタイルシート、Visual Basic プロジェクト、および ASP スクリプトが含まれています。 下記のファイルは、「Microsoft ダウンロード センター」からダウンロードできます。
元に戻す画像を拡大する
ダウンロード
Xmlsprd.exe パッケージ リリース日 : 2001 年 3 月 27 日

マイクロソフトのサポート ファイルのダウンロード方法を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
119591 オンライン サービスからマイクロソフトのサポート ファイルを入手する方法
マイクロソフトでは、アップロード時点の最新のウイルス検査プログラムを使用して、配布ファイルのウイルス チェックを行っています。配布ファイルはセキュリティで保護されたサーバー上に置かれており、権限のない第三者が無断でファイルを変更できないようになっています。

関連情報

ADO レコードセットを XML 形式で保存する方法の詳細については、以下の MSDN (Microsoft Developer Network) Web サイトを参照してください。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnasdj00/html/wsc.asp
Microsoft Office アプリケーションへの MIME コンテンツのストリーミングの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
266263 [BUG] MIME の種類を使用してデータのストリーミングを行うと Word 2000 および Excel 2000 で ASP ソースが表示される
199841 [XL2003] MIME の種類を使用して IE 内に Excel で ASP の結果を表示する方法
271572 書式付きの Excel ブックを作成して MIME コンテンツとしてストリーム配信する方法
307021 [HOWTO] Visual Basic .NET を使用して XML データを Microsoft Excel 2002 に転送する方法

プロパティ

文書番号: 285891 - 最終更新日: 2006年1月20日 - リビジョン: 7.0
この資料は以下の製品について記述したものです。
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Active Server Pages 4.0
  • Microsoft Visual Basic 6.0 Professional Edition
キーワード:?
kbhowto kbdownload KB285891
"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