Excel 文件在使用 EPPLUS 生成多个 excel 文件并使用 C# 中的 ActionResult 使用 DotNetZip 压缩后损坏

Excel file is corrupted after generating multiple excel files using EPPLUS and Zipped using DotNetZip from an ActionResult in C#

我需要导出多个 excel 包含来自数据库的数据。我正在使用 EPPLUS 来做到这一点。因为我不能从一个 ActionResult 中 return 多个文件,所以我必须压缩 excel 个文件,然后 return 该 ZIP 文件。我已经成功压缩并下载了 zip 文件,但是当我尝试打开 zip 文件中的任何 excel 文件时,它说我的 excel 文件已损坏。如果 zip 文件中只有一个 excel 文件,它可以正常工作。

这是我的代码-

public ActionResult ExportExcel()
        {
            try
            {
                projects="project1,project2";
                var memoryStream = new MemoryStream();
                var zip = new ZipFile();
                var arrProject = projects.Split(',');
                foreach (var pro in arrProject)
                {
                    var v = GetProjectData(pro);//method to get data from database
                    //Construct DataTable
                    var dt = new DataTable();
                    dt.Columns.Add("Model", typeof(string));
                    dt.Columns.Add("Color", typeof(string));
                    dt.Columns.Add("BarCode", typeof(long));
                    dt.Columns.Add("BarCode2", typeof(long));
                    //Load data to DataTable
                    foreach (var item in v)
                    {
                        var row = dt.NewRow();
                        row["Model"] = item.Model;
                        row["Color"] = item.Color;
                        row["BarCode"] = Int64.Parse(item.BarCode);
                        row["BarCode2"] = Int64.Parse(item.BarCode2);
                        dt.Rows.Add(row);
                    }
                    //transfer data from DataTable to worksheet
                    using (var package = new ExcelPackage())
                    {
                        var worksheet = package.Workbook.Worksheets.Add("IMEI");
                        worksheet.Cells["A1"].LoadFromDataTable(dt, PrintHeaders: true);
                        for (var col = 1; col < dt.Columns.Count + 1; col++)
                        {
                            worksheet.Column(col).AutoFit();
                        }
                        zip.AddEntry(pro + ".xlsx", package.GetAsByteArray());
                        zip.Save(memoryStream);
                    }
                }
                return File(memoryStream.ToArray(), System.Net.Mime.MediaTypeNames.Application.Zip, "report.zip");
            }
            catch (Exception ex)
            {
                
            }
            
        }

zip.Save(memoryStream); 行的代码存在问题,该代码正在保存到每个文件中。

将该行移到 return 语句之前,将生成一个包含所有文件的 zip 文件。 转换为如下。

zip.Save(memoryStream);
return File(memoryStream.ToArray(), System.Net.Mime.MediaTypeNames.Application.Zip, "report.zip");