首先,要实现.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技术站