解码 XML 由 Excel 生成的剪贴板的电子表格内容
Decode XML Spreadsheet content of a clipBoard generated by Excel
我想在我的程序中做一件非常简单的事情:
当用户复制 Excel (2007 - 2016) 中的选择时,我希望能够读取剪贴板内容,然后提取所有值。
目前 Excel 将许多不同的格式放入剪贴板,例如 Biff5、Biff8、CSV、plain/text 等
一个简单的解决方案可能是使用 CSV 格式,但这不够精确,因为如果我偶然发现一个数字,我不知道它是字符串还是 excel 文件中的数字。此外,日期以其原始格式发送,理解它会很痛苦。
所以我看到的解决方案是解析 Excel 发送的 "XML Spreadsheet",它看起来像这样:
<?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>
</Styles>
<Worksheet ss:Name="Feuil1">
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="3"
ss:DefaultColumnWidth="60" ss:DefaultRowHeight="15">
<Row>
<Cell><Data ss:Type="Number">8</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="Number">9</Data></Cell>
</Row>
<Row>
<Cell ss:Formula="=SUM(R[-2]C:R[-1]C)"><Data ss:Type="Number">17</Data></Cell>
</Row>
</Table>
</Worksheet>
</Workbook>
在你问之前,我已经考虑过 POI。但据我所知,我需要使用 XSSF。但是要使用它我需要 poi-ooxml,要使用它我需要 poi-ooxml-schemas 和 poi。我不知道这些 JAR 的总重量,但我并不热衷于添加 10Mb 的 jar 只是为了从剪贴板中提取信息。
有没有人试过这样做?有没有可以做到这一点的项目?
可在此处找到解决问题的代码:
我想在我的程序中做一件非常简单的事情:
当用户复制 Excel (2007 - 2016) 中的选择时,我希望能够读取剪贴板内容,然后提取所有值。
目前 Excel 将许多不同的格式放入剪贴板,例如 Biff5、Biff8、CSV、plain/text 等
一个简单的解决方案可能是使用 CSV 格式,但这不够精确,因为如果我偶然发现一个数字,我不知道它是字符串还是 excel 文件中的数字。此外,日期以其原始格式发送,理解它会很痛苦。
所以我看到的解决方案是解析 Excel 发送的 "XML Spreadsheet",它看起来像这样:
<?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>
</Styles>
<Worksheet ss:Name="Feuil1">
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="3"
ss:DefaultColumnWidth="60" ss:DefaultRowHeight="15">
<Row>
<Cell><Data ss:Type="Number">8</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="Number">9</Data></Cell>
</Row>
<Row>
<Cell ss:Formula="=SUM(R[-2]C:R[-1]C)"><Data ss:Type="Number">17</Data></Cell>
</Row>
</Table>
</Worksheet>
</Workbook>
在你问之前,我已经考虑过 POI。但据我所知,我需要使用 XSSF。但是要使用它我需要 poi-ooxml,要使用它我需要 poi-ooxml-schemas 和 poi。我不知道这些 JAR 的总重量,但我并不热衷于添加 10Mb 的 jar 只是为了从剪贴板中提取信息。
有没有人试过这样做?有没有可以做到这一点的项目?
可在此处找到解决问题的代码: