Я хочу сделать очень простую вещь в моей программе: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 МБ банок, чтобы извлечь информацию из клипа.
Неужели кто-нибудь пытался это сделать? Есть ли проект, который мог бы это сделать?
Если вы просто хотите, простые значения ячеек, можно сколотить пользовательские SAX парсер в пару сотен строк кода, используя встроенный JVM XML обрабатывающий материал – Gagravarr
Этот XML-формат не похож на тот, что находится в файлах docx, поэтому вам нужно будет разбирать это по-другому в любом случае, и POI не сможет его разобрать даже со всеми libs. – centic
Я реализовал собственный парсер и сделал это сам. В общем, никто этого не делал раньше .. Я поставлю это в свой github и загрузите ссылку здесь, если кто-то захочет сделать то же самое. – Maxoudela