如何访问XML电子表格格式?

我想访问Excel正在放入剪贴板的XML数据。

Visual Studio 2012,.NET 4.5,C#

我知道我可以用XML函数parsingXML文档,但是可能有一个更简单的工具。

理想情况下,我正在寻找像object GetCell(row, col)这样的函数object GetCell(row, col)它在特定的位置提供内容。

我只需要访问表数据。

parsing不是那么简单,因为Excel跳过空的行和列,并将索引放入下一个单元格中。

目前,我们正在使用标签文本格式,但是这有很多交换问题(混淆点和逗号,混淆date格式,文本解释为数字,…)。 XML格式更健壮。

下面是一个XML格式看起来相似的例子。 这是一个3列6行的网格区域。 请注意不同的数据格式和空单元格和行。

我将主要感兴趣的是parsing<table> 。 所有其他不是主要的兴趣。

 <?xml version="1.0"?> <?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"> <Styles> <Style ss:ID="Default" ss:Name="Normal"> <Alignment ss:Vertical="Bottom"/> <Borders/> <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/> <Interior/> <NumberFormat/> <Protection/> </Style> <Style ss:ID="s62"> <NumberFormat ss:Format="Short Date"/> </Style> </Styles> <Worksheet ss:Name="Tabelle1"> <Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="6" ss:DefaultColumnWidth="60" ss:DefaultRowHeight="15"> <Column ss:AutoFitWidth="0" ss:Width="117"/> <Row> <Cell><Data ss:Type="Number">1</Data></Cell> <Cell><Data ss:Type="Number">2.2999999999999998</Data></Cell> <Cell ss:StyleID="s62"><Data ss:Type="DateTime">2013-04-07T00:00:00.000</Data></Cell> </Row> <Row> <Cell><Data ss:Type="String">Number as Text:</Data></Cell> <Cell><Data ss:Type="String" x:Ticked="1">0123</Data></Cell> </Row> <Row> <Cell><Data ss:Type="String">next cell is empty</Data></Cell> <Cell ss:Index="3"><Data ss:Type="String">b</Data></Cell> </Row> <Row> <Cell><Data ss:Type="String">next 5 cells are all empty</Data></Cell> </Row> <Row ss:Index="6"> <Cell><Data ss:Type="String">This is</Data></Cell> <Cell><Data ss:Type="String">the</Data></Cell> <Cell><Data ss:Type="String">last line</Data></Cell> </Row> </Table> </Worksheet> </Workbook> 

只需使用XPath:/ Workbook / Worksheet [@ss:Name =“Tabelle1”] // Row [2] // Cell [2] / Data

这将select工作表“Tabelle1”,行2,单元格2中的数据。