簡體   English   中英

Excel 文件在使用 EPPLUS 生成多個 excel 文件並使用 DotNetZip 從 C# 中的 ActionResult 壓縮后損壞

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

我需要從數據庫中導出多個包含數據的 excel。 我正在使用 EPPLUS 來做到這一點。 由於我無法從 ActionResult 返回多個文件,因此我將 ZIP excel 文件返回,然后返回 ZIP 文件。 I've successfully zipped it and downloaded the zip file but when I try to open any excel file in the zip file it says my excel file is corrupted. 如果 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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM