2015-10-28 47 views
1

產生我想要做一個很簡單的事情在我的程序剪貼板的解碼XML表格內容:用Excel

當用戶做在Excel(2007至2016年)選擇的副本,我想能夠讀取剪貼板內容,然後提取所有值。

目前Excel中提出到剪貼板許多不同的格式,如BIFF5,BIFF8,CSV,純/文本等

一個簡單的解決方案是使用CSV格式,但是這不夠精確,因爲如果我翻滾一個數字,我不知道它是否是一個字符串或在Excel文件中的數字。日期也以原始格式發送,理解它會很痛苦。

所以我看到的解決方案是解析「XML電子表格」用Excel發送它看起來像:

<?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來提取clipBoard中的信息。

有沒有人試過這樣做?有沒有一個項目可以做到這一點?

+0

如果你只是想簡單的單元格的值,你可以敲了一個自定義的SAX解析器幾百行代碼,使用內置的JVM XML處理工具 – Gagravarr

+0

這個XML格式與docx-files中的格式看起來不一樣,所以在任何情況下都需要以不同的方式進行解析,並且POI甚至無法解析它庫。 – centic

+0

我實現了一個自定義的解析器,並自己做了。以前沒有人做過。我會把它放在我的github上,並在這裏上傳鏈接,以防有人想要做同樣的事情。 – Maxoudela

回答

3

來解決問題的代碼可以在這裏找到:

https://github.com/Maxoudela/XMLSpreadsheetParser

+0

謝謝,我不認爲你有一個很好的解決方案,將格式化的Excel數據放到剪貼板上嗎? – Link19

+0

爲了將一些Excel數據放在clipBoard中,您可以使用Apache POI,但它有點複雜。我通常會在剪貼板中放入一些HTML,Excel會理解它。你可以放一些tr和td標籤。如果您有興趣,我可以在GitHub上舉一個例子。 – Maxoudela

+0

這就是我在一分鐘內完成的(使用HTML),但是無法檢測到列寬度並且很煩人,但它最終開始變得複雜起來,可能不值得費心,謝謝。 – Link19