Преобразование 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 не подходит, то библиотеки в других ответах могут.

РЕДАКТИРОВАТЬ: игнорировать ошибку предупреждения преобразования.

Другие вопросы по тегам