我想访问Excel放在剪贴板上的XML数据。
Visual Studio 2012,.NET 4.5,C#
我知道我可以使用XML函数解析XML文档,但可能有一些更简单的工具可用。
理想情况下,我正在寻找像object GetCell(row, col)
这样的功能,可以在特定位置传送内容。
我只需要访问表数据。
解析并不是那么简单,因为Excel会跳过空行和列,并将索引放入下一个单元格中。
目前,我们使用选项卡式文本格式,但这有很多交换问题(混淆的点和逗号,混淆的日期格式,文本解释为数字,......)。 xml格式更加健壮。
下面是XML格式看起来如何相似的示例。这是一个有3列6行的网格区域。请注意不同的数据格式以及空单元格和行。
我主要对解析<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>
答案 0 :(得分:0)
使用XPath: /工作簿/工作表[@ss:名称= “Tabelle1”] //行[2] //细胞[2] /数据
这将选择工作表中的数据“Tabelle1”,第2行,单元格2。