确保在 ASP.NET 导出到 Excel 时保留换行,可以使用基于 XML 的格式(XML Spreadsheet, XMLSS)替代传统的 .xls 或 .xlsx 文件格式。以下是实现此过程的完整攻略:
- 创建 XML Spreadsheet (XMLSS)文件
使用以下代码创建 XMLSS 文件,并在其中添加电子表格文档的基本元素:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<Worksheet ss:Name="Sheet1">
<Table>
<!-- 数据行 -->
</Table>
</Worksheet>
</Workbook>
注意以下几点:
<?mso-application progid="Excel.Sheet"?>
指明此文件为 Excel 文件,并且希望使用 Excel 打开此文件;-
命名空间
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
为后面定义的所有元素提供命名空间。 -
添加带换行符的数据行
在 Table
元素中添加一行带有换行符的数据行:
<Row>
<Cell>
<Data ss:Type="String">第一行数据</Data>
</Cell>
<Cell>
<Data ss:Type="String">第二行数据
第二行数据的第二行
第二行数据的第三行</Data>
</Cell>
</Row>
注意以下几点:
- 在数据单元格中使用换行符需要将整个文本值包含在一个字符串中,换行使用
\n
进行分隔; -
ss:Type="String"
属性指明此单元格为字符串类型。 -
向客户端发送 XML Spreadsheet 文件
使用以下代码将 XMLSS 文件发送到客户端:
Response.ClearContent();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=example.xml");
HttpContext.Current.Response.Charset = "UTF-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
Response.Write(xmlss.ToString());
Response.End();
注意以下几点:
Content-Disposition
属性指明此文件应附加到响应中。可以设置文件的名称,如.xls
或.xlsx
;Content-Type
指明发送到客户端的文件类型,使用application/vnd.ms-excel
表示发送一个 Excel 文件。
下面是两个完整的示例代码:
示例 1:使用 StringBuilder
创建 XML Spreadsheet 文件
StringBuilder xmlss = new StringBuilder();
xmlss.Append("<?xml version=\"1.0\"?>");
xmlss.Append("<?mso-application progid=\"Excel.Sheet\"?>");
xmlss.Append("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\">");
xmlss.Append("<Worksheet ss:Name=\"Sheet1\">");
xmlss.Append("<Table>");
xmlss.Append("<Row>");
xmlss.Append("<Cell>");
xmlss.Append("<Data ss:Type=\"String\">第一行数据</Data>");
xmlss.Append("</Cell>");
xmlss.Append("<Cell>");
xmlss.Append("<Data ss:Type=\"String\">第二行数据\n第二行数据的第二行\n第二行数据的第三行</Data>");
xmlss.Append("</Cell>");
xmlss.Append("</Row>");
xmlss.Append("</Table>");
xmlss.Append("</Worksheet>");
xmlss.Append("</Workbook>");
Response.ClearContent();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=example.xml");
HttpContext.Current.Response.Charset = "UTF-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
Response.Write(xmlss.ToString());
Response.End();
示例 2:使用 XmlDocument
创建 XML Spreadsheet 文件
XmlDocument xmlss = new XmlDocument();
XmlDeclaration declaration = xmlss.CreateXmlDeclaration("1.0", "UTF-8", null);
xmlss.AppendChild(declaration);
XmlNode workbook = xmlss.CreateNode(XmlNodeType.Element, "Workbook", "urn:schemas-microsoft-com:office:spreadsheet");
XmlAttribute xmlns = xmlss.CreateAttribute("xmlns");
xmlns.Value = "urn:schemas-microsoft-com:office:spreadsheet";
XmlAttribute ssns = xmlss.CreateAttribute("xmlns:ss");
ssns.Value = "urn:schemas-microsoft-com:office:spreadsheet";
workbook.Attributes.Append(xmlns);
workbook.Attributes.Append(ssns);
xmlss.AppendChild(workbook);
XmlNode worksheet = xmlss.CreateNode(XmlNodeType.Element, "Worksheet", workbook.NamespaceURI);
XmlAttribute sheetName = xmlss.CreateAttribute("ss", "Name", worksheet.NamespaceURI);
sheetName.Value = "Sheet1";
worksheet.Attributes.Append(sheetName);
workbook.AppendChild(worksheet);
XmlNode table = xmlss.CreateNode(XmlNodeType.Element, "Table", worksheet.NamespaceURI);
worksheet.AppendChild(table);
XmlNode row = xmlss.CreateNode(XmlNodeType.Element, "Row", worksheet.NamespaceURI);
table.AppendChild(row);
XmlNode cell1 = xmlss.CreateNode(XmlNodeType.Element, "Cell", worksheet.NamespaceURI);
XmlNode data1 = xmlss.CreateNode(XmlNodeType.Element, "Data", worksheet.NamespaceURI);
XmlAttribute type1 = xmlss.CreateAttribute("ss", "Type", worksheet.NamespaceURI);
type1.Value = "String";
data1.Attributes.Append(type1);
data1.InnerText = "第一行数据";
cell1.AppendChild(data1);
row.AppendChild(cell1);
XmlNode cell2 = xmlss.CreateNode(XmlNodeType.Element, "Cell", worksheet.NamespaceURI);
XmlNode data2 = xmlss.CreateNode(XmlNodeType.Element, "Data", worksheet.NamespaceURI);
XmlAttribute type2 = xmlss.CreateAttribute("ss", "Type", worksheet.NamespaceURI);
type2.Value = "String";
data2.Attributes.Append(type2);
data2.InnerText = "第二行数据\n第二行数据的第二行\n第二行数据的第三行";
cell2.AppendChild(data2);
row.AppendChild(cell2);
Response.ClearContent();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=example.xml");
HttpContext.Current.Response.Charset = "UTF-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
Response.Write(xmlss.OuterXml);
Response.End();
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET 导出到Excel时保留换行的代码 - Python技术站