.NET Core 2 从内存流下载 Excel 文件

Eln*_*oor 6 c# excel memorystream asp.net-core-mvc asp.net-core

我正在开发一个 .NET Core 项目,我应该从记录中创建一个电子表格文件并下载它而不将它保存在服务器中。搜索上面的标题并没有多大帮助,但提供了一些指导。此外,ASP.NET 中使用的大多数方法在 .NET Core 中都不起作用。所以,我终于可以想出一个工作正常的解决方案。我将在下面的答案中为那些和我一样进行相同搜索的人分享它。

Eln*_*oor 8

首先,您需要安装EPPlus.Core包。如果您将通过 安装它Package Manager Console,您可以执行以下操作:

安装包 EPPlus.Core

然后添加您的 using 语句OfficeOpenXml

使用 OfficeOpenXml;

然后下载文件的示例方法将如下所示:

using OfficeOpenXml;

namespace MyProject.Controllers
{
    public class SubscribersController : Controller
    {
        private readonly ApplicationDbContext _context;

        public SubscribersController(ApplicationDbContext context)
        {
            _context = context;
        }

        public async Task<IActionResult> ExportToExcel()
        {
            var stream = new System.IO.MemoryStream();
            using (ExcelPackage package = new ExcelPackage(stream))
            {
                var subscribers = await _context.Subscribers.ToListAsync();                        

                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Subscribers");

                worksheet.Cells[1, 1].Value = "Name";
                worksheet.Cells[1, 2].Value = "Email";
                worksheet.Cells[1, 3].Value = "Date Subscribed";
                worksheet.Row(1).Style.Font.Bold = true;

                for (int c = 2; c < subscribers.Count + 2; c++)
                {
                    worksheet.Cells[c, 1].Value = subscribers[c - 2].Name;
                    worksheet.Cells[c, 2].Value = subscribers[c - 2].Email;
                    worksheet.Cells[c, 3].Value = subscribers[c - 2].DateCreated.ToString();
                }

                package.Save();
            }

            string fileName = "Subscribers.xlsx";
            string fileType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            stream.Position = 0;
            return File(stream, fileType, fileName);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `File()` 有一个重载,它讲述了一个流,应该可以将它寻找到 0 然后使用它。 (2认同)