在 Open XML SDK 2.7 C# 中将 Open XML 转换为 SpreadsheetML
Converting Open XML to SpreadsheetML in Open XML SDK 2.7 C#
我有一个 excel 工作簿,在 Sheet 1 中有一个小 table,如下所示:
如果我通过 7zip 或其他方式打开原始 XML,工作表数据的打开 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,可以访问人类可读的单个单元格值等。
我想做的是找到一种 "easy" 方法将 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>
关于进行此转换有什么建议吗?有没有一种方法可以创建映射 table 以从一个移动到另一个?我是否会被困在尝试手动移动所有 OpenXML 文件并手动构建所需的 XML 输出?后者是我真正想要避免的。
谢谢
您可以使用 EasyXLS 库。首先读取 xlsx 文件,然后将其转换为 SpreadSheetML。
ExcelDocument workbook = new ExcelDocument();
workbook.easy_LoadXLSXFile("Excel.xlsx");
workbook.easy_WriteXMLFile("SpreadsheetML.xml");
使用 OpenXML,您必须逐个单元格地进行。 EasyXLS 支持两种文件格式。
稍后编辑:这对您也有帮助:
Convert Excel to SpreadSheetML
尝试将 .xlsx 文件重命名为 .zip。如果 xml 格式不适合,那么其他回复中的库可能会。
编辑:忽略转换警告错误。
我有一个 excel 工作簿,在 Sheet 1 中有一个小 table,如下所示:
如果我通过 7zip 或其他方式打开原始 XML,工作表数据的打开 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,可以访问人类可读的单个单元格值等。
我想做的是找到一种 "easy" 方法将 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>
关于进行此转换有什么建议吗?有没有一种方法可以创建映射 table 以从一个移动到另一个?我是否会被困在尝试手动移动所有 OpenXML 文件并手动构建所需的 XML 输出?后者是我真正想要避免的。
谢谢
您可以使用 EasyXLS 库。首先读取 xlsx 文件,然后将其转换为 SpreadSheetML。
ExcelDocument workbook = new ExcelDocument();
workbook.easy_LoadXLSXFile("Excel.xlsx");
workbook.easy_WriteXMLFile("SpreadsheetML.xml");
使用 OpenXML,您必须逐个单元格地进行。 EasyXLS 支持两种文件格式。
稍后编辑:这对您也有帮助:
Convert Excel to SpreadSheetML
尝试将 .xlsx 文件重命名为 .zip。如果 xml 格式不适合,那么其他回复中的库可能会。
编辑:忽略转换警告错误。