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日

相关文章

  • ajax跨域调用webservice的实现代码

    要实现ajax跨域调用webservice,我们需要使用JSONP或CORS技术。JSONP是一种通过动态创建script标签来实现跨域请求的技术,而CORS是一种通过在服务器端设置响应头来实现跨域请求的技术。本文将提供详解“ajax跨域调用webservice的实现代码”的完整攻略,包括如何使用JSONP和CORS技术实现跨域请求。 使用JSONP实现跨域…

    C# 2023年5月15日
    00
  • 详解C#中的字符串拼接@

    详解C#中的字符串拼接@ 什么是字符串拼接? 在C#中,我们经常需要将多个字符串连接起来,得到一个完整的字符串。比如在构造SQL语句、拼接URL参数等场景中,字符串拼接是非常常见的操作。在最初的C#版本中,字符串拼接操作主要使用加号(+)进行操作。但是,这种方式会产生很多临时字符串对象,对内存和性能有影响。从C# 2.0版本开始,开发者可以使用字符串拼接运算…

    C# 2023年6月8日
    00
  • C# 7.0 新特性1之基于Tuple的“多”返回值方法

    当我们在编写方法时需要返回多个值时,往往可以将这些值封装成一个类或结构体返回,但是如果只是为了返回几个简单的值,这样会显得过于繁琐。而C#7.0新增了一种基于Tuple的多返回值方法,可以让我们更方便地返回多个值。 Tuple 简介 Tuple(元组)是一种简单的数据结构,它可以轻松地封装一组不同类型的值,并使用点符号来访问每个值。Tuple 最初是在 .N…

    C# 2023年5月15日
    00
  • C# 最基础知识介绍–多态

    C# 最基础知识介绍–多态 在C#中,多态是面向对象编程(OOP)中的常见概念,它允许不同类型的对象对相同的消息作出响应。简单地说,多态就是对象(或方法)有不同的表现形式。 多态性有三种形式:静态,动态和协变。下面我们会一一解释。 静态多态 静态多态性是在编译时确定的,在程序执行之前,就确定了发生的方法和参数。在编程语言C#中,静态多态性可以通过函数重载和…

    C# 2023年6月1日
    00
  • 详解.Net中字符串不变性与相等判断的特殊场景

    针对.Net中字符串不变性与相等判断的特殊场景,我们需要从以下几个方面进行讲解: 字符串不变性的概念与原理 字符串相等判断的常规方法 特殊场景下的字符串相等判断问题及解决方法 1. 字符串不变性的概念与原理 在 .Net 中,为了追求运行效率和确保字符串的安全性,字符串被设计为不可变对象,即字符串一旦被创建之后,不能被修改。基于这种不可变的特性,字符串在被使…

    C# 2023年5月31日
    00
  • 详解Winform里面的缓存使用

    在Winform中,缓存是一种常用的技术,用于提高应用程序的性能和响应速度。本文将提供详细的“详解Winform里面的缓存使用”的完整攻略,包括什么是缓存、为什么要使用缓存、如何使用缓存以及两个示例。 什么是缓存? 缓存是一种将数据存储在内存中的技术,以便在需要时快速访问数据。缓存可以提高应用程序的性能和响应速度,因为从内存中读取数据比从磁盘或网络中读取数据…

    C# 2023年5月15日
    00
  • C#实现简单工厂模式

    C#实现简单工厂模式 简单工厂模式是一种创建模式,它提供了一种创建对象的最佳方式,即抽象工厂角色生成具体的对象。 在实现C#的简单工厂模式时,需要定义一个抽象产品和多个具体产品类,再设计一个工厂类用于创建各个具体产品。 以下是实现C#的简单工厂模式的完整攻略: 第一步:定义抽象产品 抽象产品是被所创建对象所继承的基类或接口。在这里我们定义了一个抽象类 Fru…

    C# 2023年6月6日
    00
  • C#中struct与class的区别详解

    标题 C#中struct与class的区别详解 简介 在C#中,struct和class是两种定义类型的方式。它们有着许多相似之处,但也有着许多不同。正确理解和使用struct和class,能够更好的设计可维护、可扩展的程序,提高代码的表现力和效率。 区别 struct是值类型,class是引用类型 struct和class都可以有方法、属性和字段 stru…

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