我尝试使用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();
你看到我这样做的原因是,在下面的小提琴中,你会看到一个令人讨厌的弹出窗口,说明文件扩展名与格式不同。
http://jsfiddle.net/lesson8/wVejP/
我试图使用OpenXML复制上面的代码,但是在调用SpreadsheetDocument.Open方法时,它说我的文件已损坏,这与我在互操作代码中使用的文件相同。关于如何在不使用Interop的情况下实现这一目标的任何想法?
答案 0 :(得分:0)
因为Html不是有效的格式,所以它期望Excel文件的OpenXml结构。
OpenXml用于读取或写入Excel文件,没有与您正在执行的操作类似的代码。您的代码使用OLE自动化来转换html文件。以下链接概述了如何:
http://blogs.office.com/2014/06/25/open-xml-sdk-goes-open-source/