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# 接口的隐式与显示实现及适应场景

    C# 接口提供了一种将实现细节和表示细节分离的方法。使用接口可以定义类应该实现的属性、方法和事件,而不需要指定它们的实现细节。接口的隐式和显式实现机制是实现接口时需要注意的地方。 隐式实现和显示实现 C# 接口有两种实现方式:隐式实现和显示实现。这两种实现方式根据实现方法的可见性和调用方式的不同而不同。 隐式实现 在隐式实现中,接口的方法和属性在实现类中的实…

    C# 2023年5月14日
    00
  • C#在DataTable中根据条件删除某一行的实现方法

    下面是C#在DataTable中根据条件删除某一行的实现方法的完整攻略及示例: 1. DataTable中删除某一行的方法 要删除DataTable中的某一行,我们可以使用DataTable.Rows属性来遍历各行数据,再通过DataRow对象提供的Delete()方法来删除符合条件的行。 下面是示例代码: DataTable dt = new DataTa…

    C# 2023年6月6日
    00
  • unity使用链表实现贪吃蛇游戏

    下面是详细讲解使用链表实现贪吃蛇游戏的完整攻略: 1. 前言 贪吃蛇是一款经典的游戏,它的核心玩法是控制一条蛇,在游戏画面中抓住食物进行食物,并且不断地把自己的身体变长,直到撞到边界或者撞到自己的身体为止。在实现贪吃蛇游戏时,链表数据结构可以很好地解决蛇的增加和删除问题,进而实现游戏的动态更新。本篇攻略主要介绍如何使用Unity中的C#语言实现这样的游戏。 …

    C# 2023年6月3日
    00
  • c#入门之实现简易存款利息计算器示例

    C#入门之实现简易存款利息计算器示例攻略 1. 简介 存款利息计算器是一款简单、实用的工具,可以帮助用户计算存款到期后应得的利息。在本篇攻略中,我们将使用C#编程语言来实现一个简单的存款利息计算器。 2. 实现步骤 2.1 创建项目 首先,我们需要打开Visual Studio并创建一个新项目。选择菜单栏中的“文件”->“新建”->“项目”,在弹…

    C# 2023年6月7日
    00
  • 浅谈如何在ASP.NET Core中实现一个基础的身份认证

    在ASP.NET Core中实现基础身份认证 ASP.NET Core提供了一种灵活的身份认证机制,可以轻松地实现基础的身份认证。本攻略将详细介绍如何在ASP.NET Core中实现基础身份认证。 什么是基础身份认证? 基础身份认证是一种简单的身份认证机制,它使用HTTP协议的基本认证机制来验证用户的身份。在基础身份认证中,用户需要提供用户名和密码,然后服务…

    C# 2023年5月16日
    00
  • Asp.Net生成静态页面的实现方法

    Asp.Net生成静态页面的实现方法可以通过以下步骤完成: 创建一个Asp.Net Web应用程序,或者打开一个已有的应用程序。 打开Web.config文件,找到system.web节点下的compilation节点,在compilation节点中添加一行代码如下: <compilation debug="false"> 在…

    C# 2023年6月3日
    00
  • ASP.NET MVC5网站开发项目框架(二)

    下面我来为您详细讲解“ASP.NET MVC5网站开发项目框架(二)”的完整攻略。 标题 本篇攻略主要讲解MVC5项目框架的使用和配置方法。 代码块 下面是MVC5项目框架配置文件中的示例代码块: <appSettings> <add key="webpages:Version" value="3.0.0.0&…

    C# 2023年6月3日
    00
  • C#中WPF内存回收与释放LierdaCracker的实现

    C#中WPF内存回收与释放LierdaCracker的实现 在C# WPF应用程序中使用LierdaCracker实现内存回收和释放是非常重要的。下面将详细讲解如何实现这一过程。 为什么需要内存回收和释放 随着应用程序的运行,许多对象和资源被创建和使用。这些对象和资源需要被及时回收和释放,以确保应用程序占用的内存空间不会增长到无法控制的程度。内存回收和释放可…

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