NET页面导出Excel实例代码

首先,要实现.NET页面导出Excel功能,需要用到以下两个类库:

  • NPOI:用于操作Excel文档的类库。
  • Microsoft.AspNet.WebApi.Core:用于处理Web API相关请求与响应的类库。

下面是一个.NET页面导出Excel的典型实现步骤:

步骤一:创建Web API控制器

在.NET项目中创建一个Web API控制器,用于处理导出Excel的请求。例如,我们可以创建一个名为“ExportExcelController”的类,并添加一个名为“ExportUserList”的Action:

public class ExportExcelController : ApiController
{
    [HttpGet]
    public HttpResponseMessage ExportUserList()
    {
        //TODO: 导出Excel的代码逻辑
    }
}

步骤二:创建Excel文档并填充数据

在“ExportUserList”方法中,我们需要使用NPOI类库创建一个Excel文档,并将数据填充到工作表中。以下代码展示了如何创建一个包含用户信息的Excel文档:

[HttpGet]
public HttpResponseMessage ExportUserList()
{
    //创建Excel文档和工作表
    var workbook = new HSSFWorkbook();
    var sheet = workbook.CreateSheet("UserList");

    //填充表头行
    var headerRow = sheet.CreateRow(0);
    headerRow.CreateCell(0).SetCellValue("ID");
    headerRow.CreateCell(1).SetCellValue("UserName");
    headerRow.CreateCell(2).SetCellValue("Age");

    //填充数据行
    var userList = GetUserList(); //从数据库中获取用户列表
    for (int i = 0; i < userList.Count(); i++)
    {
        var row = sheet.CreateRow(i + 1);
        row.CreateCell(0).SetCellValue(userList[i].Id);
        row.CreateCell(1).SetCellValue(userList[i].UserName);
        row.CreateCell(2).SetCellValue(userList[i].Age);
    }

    //保存Excel文档并返回HttpResponseMessage
    var ms = new MemoryStream();
    workbook.Write(ms);
    var response = new HttpResponseMessage(HttpStatusCode.OK);
    response.Content = new ByteArrayContent(ms.ToArray());
    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    response.Content.Headers.ContentDisposition.FileName = "UserList.xls";
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel");
    response.Content.Headers.ContentLength = ms.Length;
    return response;
}

在上面的代码中,“GetUserList”方法是一个自定义的方法,用于从数据库中获取用户列表。

步骤三:处理HttpResponseMessage

创建Excel文档并填充数据后,我们需要将生成的Excel文档通过HttpResponseMessage返回给浏览器,让用户可以下载。上面的代码中,我们使用了“ByteArrayContent”对象将Excel文档转换成二进制流,然后将其附加到HttpResponseMessage的Content属性中。在Content的Headers中,我们指定了下载文件的名称和类型。

另外,在导出Excel,并将其返回给前端时,必须要处理好异常情况,例如出现了导出异常时,需要给出对应的错误提示信息。

到这里,一个.NET页面导出Excel的实例代码就完成了。

下面是一些更加详细的实现示例:

示例1: 以ASP.NET MVC应用程序的方式实现.NET页面导出Excel

public ActionResult Export()
{
    var users = new List<UserDto>
    {
        new UserDto {Id = 1, Name = "Alice", Age = 18},
        new UserDto {Id = 2, Name = "Bob", Age = 20},
        new UserDto {Id = 3, Name = "Charlie", Age = 33}
    };

    using(var workbook = new HSSFWorkbook())
    {
        var sheet = workbook.CreateSheet("Users");

        var header = sheet.CreateRow(0);
        header.CreateCell(0).SetCellValue("Id");
        header.CreateCell(1).SetCellValue("Name");
        header.CreateCell(2).SetCellValue("Age");

        var rowIndex = 1;
        foreach(var user in users)
        {
            var row = sheet.CreateRow(rowIndex++);
            row.CreateCell(0).SetCellValue(user.Id);
            row.CreateCell(1).SetCellValue(user.Name);
            row.CreateCell(2).SetCellValue(user.Age);
        }

        const string fileName = "Users.xls";
        var contentType = "application/vnd.ms-excel";
        Response.ContentType = contentType;
        Response.AddHeader("content-disposition", $"attachment;filename={fileName}");
        workbook.Write(Response.OutputStream);
        Response.Flush();
        Response.End();
    }

    return null;
}

此示例将在MVC应用程序中实现.NET页面导出Excel功能。主要的工作是使用HSSFWorkbook类创建工作簿,使用HSSFSheet创建工作表,将表头、数据导入工作表,并将其写入到HTTP响应中。

示例2:使用.NET Core 2.2实现.NET页面导出Excel

[HttpGet("export")]
public IActionResult Export()
{
    var users = new List<UserDto>
    {
        new UserDto {Id = 1, Name = "Alice", Age = 18},
        new UserDto {Id = 2, Name = "Bob", Age = 20},
        new UserDto {Id = 3, Name = "Charlie", Age = 33}
    };

    var fileName = "Users.xlsx";
    var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    var fileDownloadName = WebUtility.UrlEncode(fileName);
    var workbook = new XSSFWorkbook();
    var sheet = workbook.CreateSheet("Users");

    var headerRow = sheet.CreateRow(0);
    headerRow.CreateCell(0).SetCellValue("Id");
    headerRow.CreateCell(1).SetCellValue("Name");
    headerRow.CreateCell(2).SetCellValue("Age");

    var rowIndex = 1;
    foreach (var user in users)
    {
        var row = sheet.CreateRow(rowIndex++);
        row.CreateCell(0).SetCellValue(user.Id);
        row.CreateCell(1).SetCellValue(user.Name);
        row.CreateCell(2).SetCellValue(user.Age);
    }

    using (var memoryStream = new MemoryStream())
    {
        workbook.Write(memoryStream);
        var content = memoryStream.ToArray();
        return File(content, contentType, fileName);
    }
}

此示例演示如何在.NET Core应用程序中实现.NET页面导出Excel功能。与MVC应用程序的示例不同,此示例使用了XSSFWorkbook和XSSFSheet类(是EPPlus包中的Excel)来创建工作簿和工作表。此外,在.NET Core应用程序中,文件下载名称需要进行URL编码。最后,使用File()方法来返回Byte数组,这代表创建的Excel文件内容。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NET页面导出Excel实例代码 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 解析C#编程的通用结构和程序书写格式规范

    解析C#编程的通用结构和程序书写格式规范 通用结构 C#程序通常包括以下部分: using System; // 引用命名空间 public class MyClass // 定义类 { static void Main() // 主方法 { // 代码块 } } using语句引用需要使用的命名空间。 public class定义一个公共的类。 Main方…

    C# 2023年5月15日
    00
  • Vue Router中应用中间件的方法

    Vue Router中应用中间件的方法可以帮助我们在路由导航过程中执行一些操作,例如验证用户身份、记录日志、处理错误等。在本文中,我们将介绍Vue Router中应用中间件的方法,并提供两个示例说明。 Vue Router中应用中间件的方法 Vue Router中应用中间件的方法是通过beforeEach和afterEach方法来实现的。这两个方法都接受一个…

    C# 2023年5月17日
    00
  • C# File.WriteAllLines – 将字符串数组写入文件

    C#中的File.WriteAllLines方法用于将字符串数组的所有行写入文件。它会自动创建一个新的文件(如果文件不存在),并向该文件中写入所有行。如果文件已存在,则会覆盖该文件的内容。 该方法的完整格式为: public static void WriteAllLines(string path, string[] contents); 其中,path参…

    C# 2023年4月19日
    00
  • C# Linq的SequenceEqual()方法 – 确定两个序列是否相等

    当我们需要比较两个序列是否相等时,可以使用C# Linq的SequenceEqual()方法。该方法会对两个序列进行逐个比较,如果所有元素相同,返回true,否则返回false。本文将详细介绍SequenceEqual()的使用方法和注意事项。 基本用法 SequenceEqual()是Linq中的一个扩展方法,可以对数组、列表、集合等可枚举对象进行比较。其…

    C# 2023年4月19日
    00
  • 日常收集C#接口知识(知识全面)

    日常收集 C# 接口知识(知识全面) 简介 在日常写 C# 代码的过程中,我们会接触到各种各样的接口。为了更好地了解和掌握 C# 的接口知识,我们需要不断地进行学习和整理。本文将提供一些收集 C# 接口知识的建议和步骤,帮助读者全面掌握 C# 接口知识。 收集步骤 1. 阅读官方文档 首先,我们可以阅读 Microsoft 的官方文档。在 官方文档 中,我们…

    C# 2023年5月15日
    00
  • C# 判断字符串第一位是否为数字

    要判断 C# 中的字符串第一位是否为数字,可以采用以下方法: 使用 Char.IsDigit 方法,该方法用于判断一个字符是否为数字。 string str = "5Hello"; char first = str[0]; if (Char.IsDigit(first)) { Console.WriteLine("第一位是数字&…

    C# 2023年6月8日
    00
  • C#请求唯一性校验支持高并发的实现方法

    C#请求唯一性校验支持高并发的实现方法 本文将介绍如何在C#中实现高并发请求唯一性校验的方法。在一些需要保证数据一致性和避免重复提交的场景中,唯一性校验是至关重要的。 前提条件 在实现高并发请求唯一性校验之前,我们需要了解以下前提条件: 多线程编程 分布式锁 1. 基于内存实现 实现思路 首先我们可以考虑使用一份内存缓存来记录每个请求是否已经提交,如果该请求…

    C# 2023年5月15日
    00
  • C#窗体读取EXCEL并存入SQL数据库的方法

    下面我为你详细讲解“C#窗体读取EXCEL并存入SQL数据库的方法”的完整攻略。 一、准备工作 在开始编写代码前,需要先安装以下几个组件: Microsoft.Office.Interop.Excel (用于读取Excel文件); System.Data.SqlClient (用于操作SQL数据库)。 二、读取Excel文件 首先,需要引入Microsoft…

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