如何通过ClosedXML读取OpenXML格式XmlDocument并生成可打开的Excel文件?
如何将OpenXML格式的XmlDocument直接转换为ClosedXML对象?
我有一个OpenXML格式的XmlDocument,结构示例如下:
<?xml version="1.0" encoding="utf-8"?> <?mso-application progid="Excel.Sheet"?> <Workbook> <o:DocumentProperties> [snip] </o:DocumentProperties> <Styles> [snip] </Styles> <Worksheet ss:Name="Contract"> <Table> <Row> <Cell ss:StyleID="s38"> <Data ss:Type="String"/> </Cell> <Cell ss:StyleID="s38"> <Data ss:Type="String">System Number</Data> </Cell> <Cell ss:StyleID="s38"> <Data ss:Type="String">Contract Number</Data> </Cell> <Cell ss:StyleID="s38"> <Data ss:Type="String">Customer Name(s)</Data> </Cell> <Cell ss:StyleID="s38"> <Data ss:Type="String">Customer System Number(s)</Data> </Cell> [snip] </Row> <Row> [snip] </Row> [etc] </Table> <x:WorksheetOptions> [snip] </x:WorksheetOptions> </Worksheet> </Workbook>
我需要从公司内部网站向用户提供这个文件,但直接输出的代码无法正常运行:
MemoryStream strm = new MemoryStream(); XmlWriter xmlWriter = XmlWriter.Create(strm); System.Xml.XPath.XPathNavigator xPathNavigator = xPartCollection.OwnerDocument.CreateNavigator(); xslt.Transform(xPathNavigator, xmlWriter); strm.Position = 0; Response.Clear(); Response.Charset = "utf-8"; Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1250"); Response.AddHeader("content-disposition", "attachment;filename=" + PartDefGuid.InternalName + Start + ".xlsx"); Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.Charset = ""; Response.ContentEncoding = System.Text.Encoding.Default; Response.BinaryWrite(strm.ToArray()); Response.Flush(); Response.SuppressContent = true; Response.End();
Excel报错“无法打开此文件,文件格式或文件扩展名无效”,推测是公司网页下载Excel的安全设置过高导致。但网站另一处使用ClosedXML生成的Excel可以正常打开,所以希望通过ClosedXML直接读取该OpenXML格式的XmlDocument,避免重写原有生成代码。
我曾尝试将其转换为Dataset,但生成了17个独立表,合并处理较为繁琐,因此寻求直接转换的可行方法。
内容的提问来源于stack exchange,提问作者Jjmboni
相关产品推荐
相关产品推荐

