使用Asp.net核心将DataList导出到Excel

时间:2016-08-25 04:00:53

标签: asp.net-core asp.net-core-mvc export-to-excel

我想将数据列表导出为Excel格式,但我找不到任何第三方库或任何参考。我正在.net核心上构建我的项目。这里有专家建议任何解决方案。谢谢

3 个答案:

答案 0 :(得分:3)

如果跨平台(Windows,Linux,Mac)是您的主要问题,那么您必须使用一些“预发布”的东西。

OpenXML的.NET Core支持存在问题,可用于创建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 Framework之上构建ASP.NET Core项目(使用众所周知的第三方库来创建Excel)。

答案 1 :(得分:1)

我差不多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;
    }

//它对我来说很好..它对你也有帮助。

你可以找到demo here

答案 2 :(得分:1)

首先,Thx为您的工作。它现在正在帮助我:D

其次,你的代码演示中有错误

//First add the headers
for (int i = 0; i < columnsHeader.Count; i++)
{
   worksheet.Cells[1, i + 1].Value = columnsHeader[i];
}

将columnsList替换为columnsHeader(存储表格标题的位置)。像这样:

$(document).ready(function() {
    $("input.sliderValue").change(function(e) {
        var el = e.currentTarget;
        var dataIndex = el.getAttribute('data-index');
    });
});

干杯!