2017-07-28 2 views
0

XMLロードとループが簡単だと思っていましたが、何らかの理由でExcel XMLスプレッドシートから何も読み込めません。次のようにExcel ASPでExcelシートスプレッドシートのデータを読む方法

標準化された出力であるように思われるExcelスプレッドシートの内容は、次のとおりです。

<?mso-application progid="Excel.Sheet"?> 
<Workbook 
    xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
    xmlns:o="urn:schemas-microsoft-com:office:office" 
    xmlns:x="urn:schemas-microsoft-com:office:excel" 
    xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
    xmlns:html="http://www.w3.org/TR/REC-html40" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:user="urn:my-scripts"> 
    <DocumentProperties 
     xmlns="urn:schemas-microsoft-com:office:office">... 
    </DocumentProperties> 
    <OfficeDocumentSettings 
     xmlns="urn:schemas-microsoft-com:office:office">... 
    </OfficeDocumentSettings> 
    <ExcelWorkbook 
     xmlns="urn:schemas-microsoft-com:office:excel">... 
    </ExcelWorkbook> 
    <Styles>...</Styles> 
    <Worksheet ss:Name="Sheet1" ss:Protected="1"> 
     <Names> 
      <NamedRange ss:Name="Print_Titles" ss:RefersTo="=Sheet1!C2,Sheet1!R7"/> 
     </Names> 
     <Table ss:ExpandedColumnCount="34" ss:ExpandedRowCount="32" x:FullColumns="1" x:FullRows="1" ss:DefaultRowHeight="13.2"> 
      <Column ss:Hidden="1" ss:Width="175.2"/> 
      <Column ss:Width="250.20000000000002"/> 
      <Column ss:Width="60" ss:Span="31"/> 
      <Row ss:AutoFitHeight="0" ss:Height="150" ss:StyleID="s67">...</Row> 
      <Row ss:Height="15"> 
       <Cell ss:StyleID="s69"> 
        <Data ss:Type="String">W89231</Data> 
       </Cell> 
       <Cell ss:StyleID="s70"> 
        <Data ss:Type="String">Tom Brown</Data> 
        <NamedCell ss:Name="Print_Titles"/> 
       </Cell> 
       <Cell ss:StyleID="s69"> 
        <Data ss:Type="String">1E+</Data> 
       </Cell> 
       <Cell ss:StyleID="s69"> 
        <Data ss:Type="String">1m</Data> 
       </Cell> 

などなど

がbyTagNameは、私は次のことを試した最善の方法ではないことを読みましたシングルコードの最初のコード:

strFilename = "1B.xml" 
Set oXMLDoc = Server.CreateObject("MSXML2.DOMDocument.6.0") 
oXMLDoc.async = False 
oXMLDoc.Load (Server.MapPath(strFilename)) 
Set NodeList = oXMLDoc.documentElement.selectNodes("Workbook/Worksheet") 
For Each Node In NodeList 
Response.Write Node.selectSingleNode("row/cell/data/text()") 
Next 

ただし、絶対に何も起こりません。

だから私は戻ってみましたとbyTagNameを信頼して、以下を試してみましたに行きました:

strFilename = "1B.xml" 
Set oXMLDoc = Server.CreateObject("MSXML2.DOMDocument.6.0") 
oXMLDoc.async = False 
oXMLDoc.Load (Server.MapPath(strFilename)) 
Set oRows = oXMLDoc.documentElement.getElementsByTagName("Row") 
Response.Write oRows.length 

oRows.lengthフィードバックがゼロ

である私はたとえDOMに入るように見えることはできません標準のExcel XMLスプレッドシート形式です。

誰かが行を読み取って必要なデータ値を抽出する方法を説明できたら本当に感謝します。

よろしく

トム

+0

トム - あなたは、テキストとしてそれをロードのようなものでそれをラップ...とMSXMLへのXMLとしてのことをロードしようとする場合があります。 2つのトップレベルノードと混同される可能性があります。 –

+1

こんにちはVWombat - 問題はすべて名前空間と関係があることがわかりました。この部分は、ウェブ上で実際にはうまく文書化されていないようです。 –

+1

トム - あなた自身の質問への答えを書き留めてみませんか?文書のプールを増やすのに役立つでしょうか? –

答えて

1

は、それがすべての名前空間についてだということを知ることができました。

下行追加することによって:

Set oXMLDoc = Server.CreateObject("MSXML2.DOMDocument.6.0") 
oXMLDoc.setProperty "SelectionLanguage", "XPath" 
oXMLDoc.setProperty "SelectionNamespaces", "xmlns:myns='urn:schemas-microsoft-com:office:spreadsheet' xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet' xmlns:html='http://www.w3.org/TR/REC-html40' xmlns:msxsl='urn:schemas-microsoft-com:xslt' xmlns:user='urn:my-scripts'" 

を次のように私は、XML内のタグを参照することができ:

Set oXMLRows = oXMLDoc.selectNodes("/myns:Workbook/myns:Worksheet/myns:Table/myns:Row") 

及びXML構文解析は、その後始めることができます! :0)

よろしく

トム

関連する問題