如何在经典ASP中读取excel xml电子表格数据

问题描述:

我认为这将是一个简单的xml加载和循环,但出于某种原因,我无法从Excel XML电子表格中读取任何内容。如何在经典ASP中读取excel xml电子表格数据

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

汤姆 - 您可能希望将其加载为文本,包,在类似 ...并尝试加载,作为XML到MSXML。它可能与两个顶级节点混淆。 –

+1

嗨VWombat - 发现问题是所有与名称空间有关。这部分在网络上看起来确实很差 –

+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)

问候

汤姆