【发布时间】:2018-01-25 16:01:12
【问题描述】:
我想将数据列表导出为 Excel 格式,但我找不到任何第三方库或任何参考。我正在.net core 上构建我的项目。任何一位专家在这里提出任何解决方案。谢谢
【问题讨论】:
标签: asp.net-core asp.net-core-mvc export-to-excel
我想将数据列表导出为 Excel 格式,但我找不到任何第三方库或任何参考。我正在.net core 上构建我的项目。任何一位专家在这里提出任何解决方案。谢谢
【问题讨论】:
标签: asp.net-core asp.net-core-mvc export-to-excel
如果跨平台(Windows、Linux、Mac)是您主要关心的问题,那么您必须使用一些“预发布”的东西。
.NET Core 对 OpenXML 的支持存在问题,可用于创建 Open XML Office 文档(例如 XLSX),(https://github.com/OfficeDev/Open-XML-SDK/issues/65)。在准备好之前必须完成一些工作。
有人也有您的需求,并将其移植到 .NET Core 并在 GitHub (https://github.com/xrkolovos/Open-XML-SDK-for-NET-Platform-Standard) 上发布了他的项目。我自己没有尝试过,但可能值得一试。
如果您的应用程序仅在 Windows 上运行,那么您可以在完整的 .NET 框架(使用用于创建 Excel 的知名第三方库)之上构建您的 ASP.NET Core 项目。
【讨论】:
我差不多 7 个月前发布了这个问题,我找到了解决方案,所以我想分享它。
在 project.json 上添加 "PdfRpt.Core": "1.0.0-*"
在控制器上
[HttpGet("exportexcell")]
public async Task<FileContentResult> ExportExcel()
{
var loggedUser = await GetCurrentUserAsync();
var users = _userManager.Users.Select(u => new UserListVM
{
Id = u.Id,
Name = u.UserName,
Email = u.Email
}).ToList();
if (users == null) return null;
//column Header name
var columnsHeader = new List<string>{
"S/N",
"User Name",
"Email"
};
var filecontent = ExportExcell(users, columnsHeader, "Users");
return File(filecontent, "application/ms-excel", "users.xlsx"); ;
}
辅助方法
private static byte[] ExportExcell(List<UserListVM> data, List<string> columns, string heading)
{
byte[] result = null;
using (ExcelPackage package = new ExcelPackage())
{
// add a new worksheet to the empty workbook
var worksheet = package.Workbook.Worksheets.Add(heading);
using (var cells = worksheet.Cells[1, 1, 1, 7])
{
cells.Style.Font.Bold = true;
cells.Style.Fill.PatternType = ExcelFillStyle.Solid;
cells.Style.Fill.BackgroundColor.SetColor(Color.Green);
}
//First add the headers
for (int i = 0; i < columns.Count(); i++)
{
worksheet.Cells[1, i + 1].Value = columns[i];
}
//Add values
var j = 2;
var count = 1;
foreach (var item in data)
{
worksheet.Cells["A" + j].Value = count;
worksheet.Cells["B" + j].Value = item.Name;
worksheet.Cells["C" + j].Value = item.Email;
worksheet.Cells["D" + j].Value = item.RoleNam
j++;
count++;
}
result = package.GetAsByteArray();
}
return result;
}
//它对我来说很好..它也可能对你有帮助。
你可以找到演示here
【讨论】: