2015-10-28 10 views
1

Я хочу сделать очень простую вещь в моей программе:Decode XML содержание электронной таблицы в буфер обмена, порожденного Excel

Когда пользователь сделать копию выбора в Excel (2007 - 2016), я хочу быть возможность считывать содержимое буфера обмена, а затем извлекать все значения.

В настоящее время Excel помещает в буфер обмена много через различные форматы, такие как Biff5, BIFF8, ​​CSV, обычный/текст и т.д.

Одно простое решение могло бы использовать формат CSV, но это не является достаточно точным, потому что если я падать на число, я бы не знал, была ли это строка или число в файле excel. Также даты отправляются в исходном формате, и это будет боль, чтобы понять это.

Так что решение я вижу, чтобы разобрать «XML Spreadsheet», посланную 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-схемы и poi. Я не знаю общий вес этих JAR, но я не заинтересован в том, чтобы добавить 10 МБ банок, чтобы извлечь информацию из клипа.

Неужели кто-нибудь пытался это сделать? Есть ли проект, который мог бы это сделать?

+0

Если вы просто хотите, простые значения ячеек, можно сколотить пользовательские SAX парсер в пару сотен строк кода, используя встроенный JVM XML обрабатывающий материал – Gagravarr

+0

Этот XML-формат не похож на тот, что находится в файлах docx, поэтому вам нужно будет разбирать это по-другому в любом случае, и POI не сможет его разобрать даже со всеми libs. – centic

+0

Я реализовал собственный парсер и сделал это сам. В общем, никто этого не делал раньше .. Я поставлю это в свой github и загрузите ссылку здесь, если кто-то захочет сделать то же самое. – Maxoudela

ответ

3

код для решения этой проблемы можно найти здесь:

https://github.com/Maxoudela/XMLSpreadsheetParser

+0

Спасибо, я не думаю, что у вас есть хорошее решение для фактического размещения форматированных данных excel в буфер обмена? – Link19

+0

Чтобы разместить некоторые данные Excel в клипе, вы можете использовать Apache POI, но это довольно сложно. Обычно я помещаю некоторый HTML в буфер обмена, и Excel это понимает. Вы можете поместить некоторые тэги и тд. Я могу привести пример на GitHub, если вы заинтересованы. – Maxoudela

+0

Вот как я сделал это в минуту (с HTML), но я не могу определить ширину столбцов, и это раздражает, но это заканчивается тем, что становится более сложным, чем, вероятно, не стоит беспокоить, спасибо. – Link19