NET页面导出Excel实例代码

yizhihongxing

首先,要实现.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#实现将程序锁定到Win7任务栏的方法

    下面是“C#实现将程序锁定到Win7任务栏的方法”的完整攻略: 前言 Win7任务栏可以将运行的程序任务以缩略图的形式展示在任务栏上,方便用户随时切换不同的任务,提高工作效率。一般情况下,我们可以在任务栏上固定自己常用的程序,以便下次快速启动。但有些时候,我们需要将我们的程序直接锁定到任务栏上,方便用户一键启动我们的程序。本篇攻略将讲解如何使用C#实现这一功…

    C# 2023年6月7日
    00
  • C#值类型、引用类型中的Equals和==的区别浅析

    C#值类型、引用类型中的Equals和==的区别浅析 相关概念 在讨论 Equals 和 == 的区别之前,我们先来了解一下 C# 中两种常见的数据类型:值类型和引用类型。 值类型 值类型指的是简单的数据类型,如 int、double、char 等等。值类型的数据在赋值和传递时,始终是复制一份数据,而不是像引用类型那样复制一份指向数据的指针。 int a =…

    C# 2023年5月15日
    00
  • c#基础系列之System.String的深入理解

    C#基础系列之System.String的深入理解 前言 String 是 C# 中的一个非常重要且常用的数据类型,使用频率很高。本文主要讲解 String 的定义、初始化、赋值、整体替换、部分替换、常见方法、比较方式、特殊字符的处理等。 定义和初始化 定义一个 String 变量,可以使用以下语法: string str; 这样定义的变量不会被初始化,其值…

    C# 2023年6月7日
    00
  • C#怎样才能实现窗体最小化到托盘呢?

    要实现C#窗体最小化到托盘,需要以下几步: 1.添加命名空间 需要添加System.Windows.Forms命名空间来使用NotifyIcon类。 using System.Windows.Forms; 2.创建NotifyIcon对象 在窗体类中定义一个NotifyIcon对象,用来实现窗体最小化后显示在系统托盘中。 private System.Win…

    C# 2023年6月6日
    00
  • C# form-data上传图片流到远程服务器的详细代码

    下面是详细的C# form-data上传图片流到远程服务器的攻略: 前提准备 在进行上传前需要确保满足以下条件: 需要有已经存在的图片文件或者是通过二进制转换后的图片流数据; 需要有正确的接口地址和接口方法,确保能够将图片数据发送到正确的服务器地址。 代码实现 1. 使用HttpWebRequest实现图片上传 使用HttpWebRequest进行图片上传的…

    C# 2023年6月7日
    00
  • C#多线程系列之线程的创建和生命周期

    C#多线程系列之线程的创建和生命周期 线程的创建 在C#中,要创建一个新线程可以有三种方法: 1. 使用Thread类 可以通过创建Thread类对象并将其启动来创建新线程。Thread类的构造函数可以传递一个无参数的方法,该方法将在新线程中执行。Thread类中的Start方法将启动线程。 using System.Threading; class Pro…

    C# 2023年5月15日
    00
  • C# 计算标准偏差相当于Excel中的STDEV函数实例

    计算标准偏差(Standard Deviation)是统计学中的一个重要概念,它是一组数据的离散程度的度量标准。在统计分析中,标准偏差用来衡量数据集中数据的分散情况。在C#中,可以使用Math库中的方法进行计算。下面是计算标准偏差相当于Excel中STDEV函数实例的完整攻略。 步骤一:定义数据 首先,我们需要定义一组数据作为计算标准偏差的数据源。假设我们有…

    C# 2023年6月8日
    00
  • timespan使用方法详解

    TimeSpan使用方法详解 什么是TimeSpan? TimeSpan是.NET Framework中表示时间间隔的一个结构体,它用于表示两个时间点之间的时间间隔,或一段时间的持续时间。 TimeSpan包括天数、小时数、分钟数、秒数和毫秒数,可以使用各种方式构造TimeSpan实例。TimeSpan在.NET平台中被广泛用于处理时间。 在代码中创建Tim…

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