Ich habe die folgende Funktion, um eine FileStreamResult
für meine ASP.NET MVC-Anwendung zurückgeben.Erstellen ZipArchiv von Excel XLSX-Datei mit EPPLUS C#
Die Funktion gibt etwas zurück, ist aber in einer XML-Split-Mode eher eine XLSX-Datei.
Ich möchte es eine ZIPPED einzelne Datei zurückgeben.
So sieht das aktuelle Ergebnis aus.
die von @kuujinbo gegeben Hilfe verwendet Nachdem ich diese Funktion geschaffen haben. Bitte beachten Sie, dass FileContentResult aus irgendeinem Grund funktioniert und FileStreamResult nicht funktioniert.
/// <summary>
/// Generates a FileStreamResult containing a zip file with the EXCEL file in it
/// </summary>
/// <typeparam name="T">Type of object in the object list parameter</typeparam>
/// <param name="objectList">The object list enumerable. This contains the data for the EXCEL file</param>
/// <param name="fileName">The file name of the EXCEL</param>
/// <returns>FileStreamResult</returns>
public FileContentResult CreateZipFileFileContentResult<T>(IEnumerable<T> objectList, string fileName)
{
var contentType = System.Net.Mime.MediaTypeNames.Application.Zip;
using (var memoryStream = new System.IO.MemoryStream())
{
using (Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile())
{
using (var package = new OfficeOpenXml.ExcelPackage())
{
var workSheet1 = package.Workbook.Worksheets.Add("Sheet1");
workSheet1.Cells["A1"].LoadFromCollection<T>(objectList, true);
var firstRow = workSheet1.Row(1);
if (firstRow != null)
firstRow.Style.Font.Bold = true;
zip.AddEntry(fileName, package.GetAsByteArray());
zip.Save(memoryStream);
var fcr = new FileContentResult(memoryStream.ToArray(), contentType); //NOTE: Using a File Stream Result will not work.
fcr.FileDownloadName = fileName + ".zip";
return fcr;
}
}
}
}
sieht aus wie das ist, was es sein soll. xlsx-Dateien sind gezippte opendocument-Strukturen. Ich denke, Ihr Datei-Explorer zeigt nur den ZIP-Inhalt transparent in der Verzeichnishierarchie an (das Symbol in der oberen linken Ecke vorausgesetzt). Wenn Sie .zip in .xlsx umbenennen, können Sie es mit Excel öffnen. – dlatikay
+ du schreibst nie etwas auf 'newEntryStream'? Diese Funktion scheint nur den EPPlus-Ausgabestream (der bereits intern ein ZIP ist und xlsx-Erweiterung haben soll) mit der Erweiterung .zip zurückzugeben. – dlatikay
Es scheint, dass Sie richtig sind. Ich werde mal schauen. –