ASP.NET 导出到Excel时保留换行的代码

确保在 ASP.NET 导出到 Excel 时保留换行,可以使用基于 XML 的格式(XML Spreadsheet, XMLSS)替代传统的 .xls 或 .xlsx 文件格式。以下是实现此过程的完整攻略:

  1. 创建 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技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C#中HttpClient使用注意(预热与长连接)

    C#中HttpClient使用注意(预热与长连接) 在使用HttpClient时需要注意两个方面的问题:预热和长连接。本文将详细讲解这两方面的注意事项和实现方法。 预热 预热是指提前对HttpClient进行初始化,并使其保持一段时间的生命周期,以减少后续的请求延迟。一般来说,在使用HttpClient的应用中,HttpClient实例的创建、初始化和销毁都…

    C# 2023年6月6日
    00
  • 字符串的模式匹配详解–BF算法与KMP算法

    字符串的模式匹配详解–BF算法与KMP算法 背景 在计算机科学中,字符串匹配是指在一个字符串中查找一个子串的出现位置。在实际开发过程中,字符串匹配是非常常见的情况,例如数据库模糊查询、搜索引擎的查询等都需要使用字符串匹配算法。 BF算法 BF算法全称Brute-Force算法,又称暴力匹配算法,思路非常简单:在主串中每个可能的位置开始,与模式串进行匹配。如…

    C# 2023年6月7日
    00
  • jquery中ajax调用json数据的使用说明

    在Web开发中,使用Ajax调用JSON数据是一种常见的任务,它可以帮助开发者动态地加载和更新页面内容。在本攻略中,我们将介绍如何使用jQuery中Ajax调用JSON数据,并提供两个示例来说明其用法。 以下是两个示例,介绍如何使用jQuery中Ajax调用JSON数据: 示例一:使用$.ajax方法调用JSON数据 首先,我们需要引入jQuery库: &l…

    C# 2023年5月15日
    00
  • Unity Shader实现玻璃材质效果

    下面是Unity Shader实现玻璃材质效果的完整攻略: 第一步:创建一个透明材质球 首先,在Unity中创建一个透明材质球。在Unity菜单栏中选择Assets->Create->Material,右键选择Rename,将Material更名为“Glass”。 第二步:设置Glass的Shader为Transparent 在“Glass”的I…

    C# 2023年6月3日
    00
  • C#微信开发之接收 / 返回文本消息

    C#微信开发之接收/返回文本消息的完整攻略如下: 一、前置知识 C#编程基础知识 微信公众号开发基础知识 微信公众号注册和认证 二、准备工作 注册微信公众号,获取AppID和AppSecret。 部署Web服务器。 在微信公众号后台中配置服务器地址和Token。 三、搭建基础框架 新建C#项目,并添加NuGet包WeChatSDK。 编写入口函数,创建WeC…

    C# 2023年5月15日
    00
  • C# WPF如何反射加载Geometry几何图形数据图标

    请看下面的详细说明。 C# WPF 如何反射加载 Geometry 几何图形数据图标 什么是Geometry? Geometry 是Windows中WPF 支持的描述2D和3D 几何图形对象的一个抽象类,我们在WPF开发中可以通过Geometry 来制定元素的形状,并以此来展示出不同的图标。 如何实现反射加载Geometry 几何图形数据图标? 反射加载Ge…

    C# 2023年6月6日
    00
  • C#自定义简化cookie类实例

    下面是C#自定义简化cookie类实例的完整攻略: 什么是cookie? 在Web开发中,服务器可以通过设置一个被浏览器保存的cookie给指定用户,在后续的用户请求时进行识别,在保持用户状态、实现一些个性化操作等方面发挥重要作用。 C#中的cookie类 在C#中,可以使用System.Net.Cookie类来表示cookie。一般情况下,我们需要设置co…

    C# 2023年5月31日
    00
  • Winform学生信息管理系统主页面设计(2)

    Winform学生信息管理系统主页面设计(2) 在Winform学生信息管理系统的主页面设计部分,我们将主要关注以下几个方面:主页面布局设计、主页面控件设计及其事件处理等内容。 主页面布局设计 主页面布局设计是整个Winform学生信息管理系统的基础,当我们确定好主页面的结构及各个控件的位置后,系统的后续开发工作才能有序展开。 主页面布局设计示例1 以下是一…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部