【发布时间】:2014-08-11 15:58:48
【问题描述】:
我正在尝试使用 MVC5 从 HTML 文件创建 excel 文件。我的 HTML 是一个在 HTML 标记中带有一些附加标记的表格
<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>Test</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>
<colgroup>
<col style="width: 2%;">
<col style="width: 16%;">
<col style="width: 32%;">
<col style="width: 16%;">
<col style="width: 16%;">
<col style="width: 16%;">
<col style="width: 2%;">
</colgroup>
<thead>
...
</thead>
<tbody id="worksheetBody">
...
<tfoot>
...
</tfoot>
</table>
我使用互操作库进行了这项工作,但这显然不是一个非常合理的解决方案,因为部署起来很麻烦。这是我工作的代码。
var wb = app.Workbooks.Open(Filename: @"C:\test.html");
wb.SaveAs(Filename: @"C:\tmp.xlsx", FileFormat: XlFileFormat.xlOpenXMLWorkbook);
wb.Close();
您看到我这样做的原因是,在下面的 Fiddle 中,您会收到一个恼人的弹出窗口,提示文件扩展名与格式不同。
http://jsfiddle.net/lesson8/wVejP/
我正在尝试使用 OpenXML 复制上述代码,但在调用 SpreadsheetDocument.Open 方法时,它说我的文件已损坏,这与我在互操作代码中使用的文件相同。关于如何在不使用 Interop 的情况下实现这一目标的任何想法?
【问题讨论】:
-
您在 .html 文件上调用
Open()? -
在 OpenXML 和互操作代码中都是。互操作代码有效,OpenXML 抛出错误说“文件包含损坏的数据”
-
是的,因为(正如我的回答所示)html 不是 Excel 文件的有效 OpenXml 格式。
标签: c# html asp.net-mvc excel openxml-sdk