【问题标题】:Converting Open XML to SpreadsheetML in Open XML SDK 2.7 C#在 Open XML SDK 2.7 C# 中将 Open XML 转换为 SpreadsheetML
【发布时间】:2018-03-03 09:25:04
【问题描述】:

我有一个 Excel 工作簿,在 Sheet 1 中有一个小表格,如下所示:

如果我通过 7zip 或其他方式打开原始 XML,则工作表数据的 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,并且可以访问人类可读的单个单元格值等。

我想做的是找到一种“简单”的方法来将 OpenXML 工作表数据转换为类似于将文件保存为 2003 电子表格 XML 时所获得的数据,如下所示:

    <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 输出?后者是我真正想要避免的。

谢谢

【问题讨论】:

    标签: c# xml excel openxml spreadsheetml


    【解决方案1】:

    您可以使用EasyXLS 库。首先读取 xlsx 文件,然后将其转换为 SpreadSheetML。

    ExcelDocument workbook = new ExcelDocument();
    workbook.easy_LoadXLSXFile("Excel.xlsx");
    workbook.easy_WriteXMLFile("SpreadsheetML.xml");
    

    使用 OpenXML,您必须逐个单元地进行。 EasyXLS 支持两种文件格式。

    稍后编辑:这也会对您有所帮助:
    Convert Excel to SpreadSheetML

    【讨论】:

    • 感谢您的建议!我不反对花一些钱来节省时间,但是有没有开源或免费的选择?
    • 有支持 xlsx 或/和 xls 文件的免费库,但我不知道是否有支持 SpreadsheetML 的库。 SpreadsheetML 格式已经很老了。
    【解决方案2】:

    尝试将 .xlsx 文件重命名为 .zip。如果那个 xml 格式不适合,那么其他回复中的库可能会。

    编辑:忽略转换警告错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多