Преобразование Open XML в SpreadsheetML в Open XML SDK 2.7 C#
У меня есть книга Excel с небольшим столом на листе 1, например:
Если я открою необработанный XML с помощью 7zip или чего-то еще, вывод Open XML для данных рабочего листа будет выглядеть так:
<sheetData>
<row r="1" spans="1:5" x14ac:dyDescent="0.3">
<c r="A1" t="s">
<v>0</v>
</c>
<c r="B1" t="s">
<v>1</v>
</c>
<c r="C1" t="s">
<v>2</v>
</c>
<c r="D1" t="s">
<v>3</v>
</c>
<c r="E1" t="s">
<v>4</v>
</c>
</row>
Теперь отложите вилы на секунду. Я знаю, что есть несколько других связанных файлов, кроме данных рабочего листа, которые включают форматирование и макет. Я работал с Open XML SDK Today и могу получить доступ к отдельным значениям ячеек, которые могут быть прочитаны человеком, и т. Д.
Я пытаюсь найти "простой" способ преобразования данных рабочей таблицы OpenXML во что-то похожее на то, что вы получите, если сохранить файл в виде XML-таблицы 2003 года, например:
<Worksheet ss:Name="Sheet1">
<Table ss:ExpandedColumnCount="9" ss:ExpandedRowCount="5" x:FullColumns="1" x:FullRows="1" ss:DefaultRowHeight="14.4">
<Column ss:Width="44.400000000000006"/>
<Column ss:Width="55.800000000000004"/>
<Column ss:Width="80.400000000000006"/>
<Column ss:Width="58.2" ss:Span="5"/>
<Row>
<Cell>
<Data ss:Type="String">Name</Data>
</Cell>
<Cell>
<Data ss:Type="String">Birthday</Data>
</Cell>
<Cell>
<Data ss:Type="String">Favorite Color</Data>
</Cell>
<Cell>
<Data ss:Type="String">Pet Name</Data>
</Cell>
<Cell>
<Data ss:Type="String">Car</Data>
</Cell>
</Row>
<Row>
<Cell>
<Data ss:Type="String">Joe</Data>
</Cell>
<Cell ss:StyleID="s16">
<Data ss:Type="DateTime">2017-01-01T00:00:00.000</Data>
</Cell>
<Cell>
<Data ss:Type="String">blue</Data>
</Cell>
<Cell>
<Data ss:Type="String">Bo</Data>
</Cell>
<Cell>
<Data ss:Type="String">Ferrari</Data>
</Cell>
</Row>
Есть предложения по конверсии? Есть ли способ создать таблицу сопоставления для перехода от одного к другому? Собираюсь ли я застрять, пытаясь вручную перемещаться по всем файлам OpenXML и вручную создавать желаемый вывод XML? Это то, чего я действительно пытаюсь избежать.
Спасибо
2 ответа
Вы можете использовать библиотеку EasyXLS. Сначала прочитайте файл xlsx, а затем преобразуйте его в SpreadSheetML.
ExcelDocument workbook = new ExcelDocument();
workbook.easy_LoadXLSXFile("Excel.xlsx");
workbook.easy_WriteXMLFile("SpreadsheetML.xml");
С OpenXML вам придется делать это по ячейкам. EasyXLS поддерживает как форматирование файлов.
Позже отредактируйте: это также поможет вам:
Конвертировать Excel в SpreadSheetML
Попробуйте просто переименовать файл.xlsx в.zip. Если этот формат XML не подходит, то библиотеки в других ответах могут.
РЕДАКТИРОВАТЬ: игнорировать ошибку предупреждения преобразования.