OpenXML从HTML开放SpreadsheetDocument

时间:2014-08-11 15:58:49

标签: c# html asp.net-mvc excel openxml-sdk

我尝试使用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的情况下实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:0)

因为Html不是有效的格式,所以它期望Excel文件的OpenXml结构。

OpenXml用于读取或写入Excel文件,没有与您正在执行的操作类似的代码。您的代码使用OLE自动化来转换html文件。以下链接概述了如何:

http://blogs.office.com/2014/06/25/open-xml-sdk-goes-open-source/