XSL を使用して、サーバー側で使用するため Excel の XML スプレッドシートに変換する方法

文書翻訳 文書翻訳
文書番号: 278976
すべて展開する | すべて折りたたむ

概要

Excel 2002 では、開発者は、XML スプレッドシート (XMLSS) 形式のワークシートから書式設定されたデータを抽出することができます新しい XML 機能を紹介します。は、 プロパティは 範囲 オブジェクト セルの書式や内容の XMLSS を返すことができます。XMLSS は整形式 XML で Microsoft XML パーサーを操作するため、実行時に読み込むことができます。この機能の 1 つの潜在的な使用は XML データの処理をサーバー アプリケーションにすることです。この資料で Excel ブックをインターフェイスとして、ブック内の範囲から抽出された XML データを処理する Active Server Pages (ASP) スクリプトを使用、これらの 1 つの例を示しています。

この資料で Excel ブック、ASP スクリプトでは、すべての注文処理システムとして連携して動作するスタイル シートの作成について説明します。全体の手順は、各コンポーネントの説明と、全体のソリューションに使用されていますが与えられます。この資料に記載されているサンプルもダウンロード可能です。ダウンロードの詳細については、この資料の最後に「ダウンロード」セクションを参照してください。

詳細

このサンプルでは、いくつかのさまざまなコンポーネントは、注文処理として機能するために協力します。
  • ASP スクリプト.サーバー側のコンポーネントは、新規のご注文に対するクライアント要求を受け取る ASP スクリプトです。このスクリプトは、特定の XML 形式にするのには、要求を想定しています。スクリプトの XML からの情報を受信し、ActiveX データ オブジェクト (ADO) を使用して、Northwind サンプル データベースに新しい注文を追加するになります。
  • Excel ブック.クライアント側のコンポーネントは、受注入力用のワークシートを含む Excel ブックおよびマクロは、ユーザーの新しい注文を処理する ASP スクリプトの対話です。
  • XSL スタイル シート.スタイル シートは Excel XMLSS を ASP スクリプト必要があります、カスタム XML 形式に変換します。Excel マクロ、スタイル シートを読み込むし、XMLSS を Web サーバーで ASP スクリプトにデータを転記する前に、カスタムの XML を変換します。

手順 1: ASP 受注処理スクリプトを作成します。

OrderProc (既定ルート フォルダーは C:\Inetpub\Wwwroot です)、Web サーバーの仮想ルート フォルダーをという名前の新しいフォルダーを作成します。OrderProc] フォルダーで、次のスクリプトを OrderEntry.asp をという名前の新しいファイルを作成します。サンプル データベースの Northwind へのアクセス、スクリプトを使用します。Office のインストール環境に合わせて接続文字列 (sConn) では、Northwind.mdb へのパスを変更する必要があります。
<%@ Language="vbscript" CodePage="65001"%>

<%
    Response.Buffer = True
    Response.ContentType = "text/xml"
  
    Dim oDataXML                    'Custom Data XML passed in by caller.
    Dim oConn                       'ADO Connection to Northwind database.
    Dim oOrdersRS, oDetailsRS       'ADO Recordsets for the Orders table and Order Details Table.
    Dim oItems                      'Collection of nodes meeting the match. "Order/Items/Item"
    Dim oItem                       'Single node in oItems.
    Dim sCustID                     'Customer ID for the new order.
    Dim sOrderID                    'Order ID of the newly created record. in Orders table
    Dim sStatus                     'Status of order processing.
    Dim bContinue                   'Flag that indicates whether or not to continue processing the order.

    Const sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\program files\microsoft office\office10\samples\northwind.mdb"
    On Error Resume Next

    'Load the XML passed into the request.
    Set oDataXML = Server.CreateObject("Microsoft.XMLDOM")
    oDataXML.Load Request
    bContinue = True

    'Obtain the Customer ID. If no customer id is provided, report an error.
    sCustID = oDataXML.selectSingleNode("Order/CustomerID").Text
    If sCustID="" Then
       sStatus = "There is no customer specified for the order"
       bContinue = False
    End If

    'Obtain collection of "items" for this order. If the item count = 0, report an error.
    If bContinue Then
       Set oItems = oDataXML.SelectNodes("Order/Items/Item")
       if oItems.length = 0 Then
          sStatus = "There are no items to process for this order"
          bContinue = False
       End If
    End If

    'Open a connection to the Northwind database.
    If bContinue Then
       Set oConn = CreateObject("ADODB.Connection")
       oConn.Open sConn
       if err.Number <> 0 Then
          sStatus = err.Description
          bContinue = False
       end if

    End If

    'Open the Orders and Order Details tables and add the new records.
    If bContinue Then

       Set oOrdersRS = CreateObject("ADODB.Recordset")
       oOrdersRS.Open "SELECT * FROM Orders", oConn, 2, 3
       Set oDetailsRS = CreateObject("ADODB.Recordset")
       oDetailsRS.Open "SELECT * FROM [Order Details]", oConn, 2, 3

       'Add a new entry in the Orders table.
       oOrdersRS.AddNew
       oOrdersRS.Fields("CustomerID").Value = sCustID
       oOrdersRS.Fields("OrderDate").Value = CDate(Now)
       oOrdersRS.Update
       sOrderID = oOrdersRS.Fields("OrderID").Value
        
       'And a new record for each item in the order XML to the Order Details table.
       If err.number = 0 Then
          For Each oItem In oItems
              oDetailsRS.AddNew
              oDetailsRS.Fields("OrderID").Value = sOrderID
              oDetailsRS.Fields("ProductID").Value = oItem.childnodes(0).Text
              oDetailsRS.Fields("Quantity").Value = CLng(oItem.childnodes(1).Text)
              oDetailsRS.Fields("UnitPrice").Value = CLng(oItem.childnodes(2).Text)
              oDetailsRS.Fields("Discount").Value = 0
              oDetailsRS.Update
          Next
       End If

       if err.Number <> 0 Then
          sStatus = err.Description
       else
          sStatus = "Success"
       end if

       'Close the recordsets and connection.
       oDetailsRS.Close
       oOrdersRS.Close
       oConn.Close

    End If
  
    'Return the resulting XML (the Order status).
    Dim sResult
    sResult = "<?xml version=""1.0""?>"
    sResult = sResult & "<OrderProcessed>" 
    sResult = sResult & "<Status>" & sStatus & "</Status>"
    sResult = sResult & "<OrderID>" & sOrderID & "</OrderID>"
    sResult = sResult & "</OrderProcessed>"
    Response.Write sResult
    Response.End
 
%> 
				
正常に、注文要求を処理するには、この ASP スクリプトは次のように構造化された XML データを予想しています。

<?xml version="1.0"?>
<Order>
    <CustomerID>BOTTM</CustomerID>
    <Items>
        <Item>
            <ProductID>4</ProductID>
            <Quantity>11</Quantity>
            <Price>20.25</Price>
        </Item>
        <Item>
            <ProductID>18</ProductID>
            <Quantity>2</Quantity>
            <Price>63.7</Price>
        </Item>
    </Items>
</Order>
					
この XML の"BOTTM"という ID を持つ顧客の注文を指定します。順番に 2 つの項目が含まれています: 11 単位の製品の第 4 の ID および製品の 2 ユニット 18 の id。

クライアントに有効な注文情報が与えられていることを確認するのには、エラー処理、ASP スクリプトを実行します。クライアントは、顧客 ID と 1 つ以上の項目を提供する必要があります。これらの条件が満たされない場合は、ASP スクリプトは注文は処理されませんされエラーが返されます。

ASP スクリプトは、注文要求を行ったクライアントに XML データを返します。この XML 注文処理の成否を示し、注文番号がの成功も用意されています。

<?xml version="1.0"?>
<OrderProcessed>
    <Status>Success</Status>
    <OrderID>11078</OrderID>
</OrderProcessed>
					

手順 2: 受注のブック インターフェイスを作成します。

  1. Excel で新しいブックを開きます。
  2. ラベル セル A1、A3、B3、C3 で次のように入力します。
    A1:   Customer ID    B1:                C1:
    A2:                  B2:                C2:
    A3:   Product ID     B3:   Quantity     C3:   Price
    					
  3. セルがセル a1 から b1 を選択します。で、 挿入 メニューのポイント 名前作成.で、 名前を作成します。 ダイアログ ボックスで、 左の列 クリックして [OK].これは、定義済みの名前が作成されます。 Customer_ID セル B1 にです。
  4. A3:C8 のセルを選択します。で、 挿入 メニューのポイント 名前作成.で、 名前を作成します。 ダイアログ ボックスで、 上端行 クリックして [OK].これは、定義名を作成します。 Product_ID, 数量価格 それぞれ A4:A8、B4:B8、および C4:C8 のセルします。
  5. Visual Basic エディターを起動するのには、alt キーを押しながら F11 キーを押します。
  6. Visual Basic のエディターでは、 挿入 メニューをクリックして モジュール.次のマクロ、コード モジュールに追加します。
    Sub ProcessOrder()
    
        Const sFolder = "http://YourWebServer/OrdrProc/"
    
        'Load a new DOMDocument based on the XMLSS of the range A1:C8.
        Dim oRangeXML
        Set oRangeXML = CreateObject("Microsoft.XMLDOM")
        oRangeXML.LoadXML Range("A1:C8").Value(xlRangeValueXMLSpreadsheet)
            
        'Transform the XMLSS to custom XML that the ASP can
        'interpret as a new "order".
        Dim oXSL, oOrderXML
        Set oXSL = CreateObject("Microsoft.XMLDOM")
        oXSL.Load ThisWorkbook.Path & "\OrderEntry.xsl"
        Set oOrderXML = CreateObject("Microsoft.XMLDOM")
        oRangeXML.transformNodeToObject oXSL, oOrderXML
        
        'Submit the XMLSS to the ASP page for processing.
        Set oXMLHTTP = CreateObject("Microsoft.XMLHTTP")
        oXMLHTTP.Open "Post", sFolder  & "/OrderEntry.asp", False
        oXMLHTTP.setRequestHeader "Content-Type", "text/xml; charset=""UTF-8"""
        oXMLHTTP.send oOrderXML
        
        'Retrieve the results of the processing by the ASP page.
        Dim oResult
        Set oResult = CreateObject("Microsoft.XMLDOM")
        oResult.Load oXMLHTTP.responseXML
    
        'Check the returned XML -- if the Status is "Success", fill in the
        'Order # and display a message. If the Status is not "Success",
        'report the error.
        Dim sStatus As String
        sStatus = oResult.selectsinglenode("OrderProcessed/Status").Text
        If sStatus = "Success" Then
            MsgBox "Thank you. Your order number is " & _
                oResult.selectsinglenode("OrderProcessed/OrderID").Text
        Else
            MsgBox sStatus
        End If
    
    End Sub
    					
    メモ: 変更 YourWebServer sFolder 定数でするには、Web サーバーの名前。

  7. Visual Basic エディターを閉じて、Excel に戻ります。
  8. Invoice1.xls として以前に作成した OrdrProc フォルダー内のブックを保存します。
「オーダー フォーム」基本的にはセルの A1:C8 です。マクロは、注文フォームの XMLSS を取得し、新規にロード Domdocument オブジェクト オブジェクトです。拡張スタイル シート言語 (XSL) スタイル シートを読み込みます Domdocument オブジェクト ASP として新規注文を解釈できる XML 構造には、XMLSS を変換します。マクロを使用して、 XMLHTTP XML ASP スクリプトの順序は、Web サーバー上で投稿するには、[オブジェクト] をクリックします。ASP スクリプト、注文を処理し、複数の XML マクロの注文のステータス情報を返します。

メモ: 設計の選択肢としては、クライアント側のマクロ コードを XMLSS をカスタム XML に変換する作業が与えられます。また、XMLSS ASP スクリプトに投稿して ASP の変換を実行することがでくこともできます。

手順 3: スタイル シートを作成します。

[OrdrProc] フォルダーを OrderEntry.xsl をという名前の新しいファイルを作成し、以下の XSL コードを貼り付けます。
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

  <xsl:template match="/">
    <xsl:pi name="xml">version="1.0"</xsl:pi>

    <Order>
      <CustomerID><xsl:value-of select="Workbook/Worksheet/Table/Row/Cell[NamedCell[@ss:Name='Customer_ID'] $and$ Data[@ss:Type!='Error']]"/></CustomerID>
      <Items>
        <xsl:for-each select="Workbook/Worksheet/Table/Row[Cell[NamedCell[@ss:Name='Product_ID'] $and$ Data[@ss:Type!='Error']]]">
          <Item>
            <xsl:apply-templates/>
          </Item>
        </xsl:for-each>
      </Items>
    </Order>

  </xsl:template>

  <xsl:template match="Cell[NamedCell[@ss:Name='Product_ID']]">
    <ProductID><xsl:value-of select="Data"/></ProductID>
  </xsl:template>

  <xsl:template match="Cell[NamedCell[@ss:Name='Quantity']]">
    <Quantity><xsl:value-of select="Data"/></Quantity>
  </xsl:template>

  <xsl:template match="Cell[NamedCell[@ss:Name='Price']]">
    <Price><xsl:value-of select="Data"/></Price>
  </xsl:template>

</xsl:stylesheet>
				
XSL、XMLSS をカスタム オーダー (手順 1 で説明) XML は次のとおり変換します。
  • XSL、<namedcell>を含む<cell>ノードと子ノードの<data>に到達するまで、ノード階層を走査して、顧客 ID を検索します。それをチェック<namedcell>ss:Name 'Customer_ID' とは、同じ属性を持つ<data>'エラー' でない、ss:Type 属性を持っています<b00></b00></data></namedcell></data></cell></namedcell>。
  • 注文する項目を検索するには、XSL がすべて検索<row>ノードと、<cell>が含まれているノードを<namedcell>'Product_ID' の ss:Name 属性の子ノードとは<data>'エラー' ではありません、ss:Type 属性の子ノード</data></namedcell></cell></row>。
  • 各<row>アイテムを XSL を決定することが一致するように XSL テンプレートのためを使用<namedcell>'Product_ID'、'量' と '価格' の ss:Name 属性を持つノード</namedcell></row>。

手順 4: 新しい注文を処理するサンプル コードを実行します。

  1. Invoice1.xls Excel に戻ります。
  2. 受注入力をシミュレートするには、顧客および製品情報を次のようにシート 1 を更新します。
    A1:   Customer ID    B1:   BOTTM        C1:
    A2:                  B2:                C2:
    A3:   Product ID     B3:   Quantity     C3:   Price
    A4:   4              B4:   11           C4:   20.25
    A5:   18             B5:   2            C5:   63.70
    					
    メモ: このサンプルは有効な顧客および製品 Id、ASP スクリプトを正常に注文を処理するを入力してください。

  3. で、 ツール メニューのポイント マクロ クリックして マクロ.選択、 ProcessOrder [マクロ] をクリックし 実行.
  4. ASP スクリプトが正常に順序を処理すると、新しい注文番号とメッセージが表示されます。Microsoft Access を起動し、ノースウィンド サンプル データベースを開きます。ASP から返された注文 ID を [受注] テーブルに新しいエントリが表示されます。[受注明細] テーブルの 2 つの新しいエントリは、同じ注文 ID を表示することもAccess を終了し、Excel で Invoice1.xls に戻る。
  5. セル B1 に、顧客 ID をオフにし、[マクロを再度実行します。この時点では、サーバーが、注文を処理することができないし、顧客 ID が渡されていないことを示すエラーが返されます。

ダウンロード

ExcelXML.exe には、Invoice1.xls の拡張バージョンに加えて、この資料に記載されているサンプルが含まれています。Invoice2.xls は、Invoice1.xls として、同じスクリプトを ASP と XSL スタイル シートを使用します。ただし、ワークシートの保護、データの入力規則よりユーザー フレンドリな注文フォームを提供するため、VLOOKUP の数式、その他の Excel の機能は、Invoice2.xls を示します。

次のファイルは、Microsoft ダウンロード センターからダウンロードできます。
Excelxml.exe
リリース日: 2001 年 4 月 3 日

マイクロソフトのサポート ファイルをダウンロードする方法の詳細については、Knowledge Base の資料を参照するのには、次の資料番号をクリックしてください。
119591 オンライン サービスからマイクロソフトのサポート ファイルを入手する方法
マイクロソフトは、このファイルのウイルスをスキャンしました。マイクロソフトは、ファイルが転記された日付に利用可能な最新のウイルス検出ソフトウェアを使用します。ファイルは、ファイルに不正な変更を防止するのに役立つセキュリティが強化されたサーバーに格納されます。

関連情報

XML と ASP を使用してサーバー側のソリューションを構築する詳細については、次のマイクロソフト開発ネットワーク (MSDN) Web サイトを参照してください。
XML の概要
http://www.microsoft.com/learning/en/us/syllabi/2500AFinal.mspx

XML のチュートリアル
http://msdn.microsoft.com/en-us/library/ms950712.aspx

XSL のデベロッパーズ ガイド
http://msdn.microsoft.com/en-us/library/ms862738.aspx

クライアントとサーバーの間に XML を送信します。
http://msdn.microsoft.com/en-us/library/ms763733.aspx

詳細については、マイクロソフト サポート技術記事を表示するのには以下の記事番号をクリックしてください。
288215 情報: Excel 2002 と XML
285891 Visual Basic または ASP を使用しては、Excel 2002 用の XML スプレッドシートを作成する方法
288130 ASP を使用して、クライアント側で表示を XML スプレッドシートを作成するには、方法
(c) Microsoft Corporation 2001 年すべての権利予約します。Lori B. ターナー、マイクロソフト コーポレーションによって出資します。

プロパティ

文書番号: 278976 - 最終更新日: 2011年7月25日 - リビジョン: 6.0
キーワード:?
kbhowto kbdownload kbfile kbmt KB278976 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:278976
Microsoft Knowledge Base の免責: 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