Compress Excel File into Zip File using Memory Stream based on size

44 Views Asked by At

I have successfully created an Excel spreadsheet with OpenXml and MemoryStream. Using that memory stream and based on the size of the stream I would like to compress the data from the spreadsheet into a zip file. Im a little confused on what I should do with the stream(to zip it) after checking the size of the stream.

var stream = new MemoryStream();
using SpreadsheetDocument document = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook);
WorkbookPart workbookPart = document.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
var sheetData = new SheetData();
worksheetPart.Worksheet = new Worksheet(sheetData);
Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
// Now create Sheet1
var workSheet = new Sheet()
{
    Id = workbookPart.GetIdOfPart(worksheetPart),
    SheetId = 1,
    Name = "Sheet1"
};

sheets.Append(workSheet);
worksheetPart.Worksheet.Save();
workbookPart.Workbook.Save();
document.Save();
document.Close();

byte[] fileData = stream.ToArray();
var fileSize = fileData.Length;
if(fileSize > 1000){
    using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, true))
        {
            var fileInArchive = archive.CreateEntry(fileName, CompressionLevel.Fastest);
            using (var entryStream = fileInArchive.Open())
            {
                
            }

            using (var fileStream = new FileStream(@"C:\Temp\test.zip", FileMode.Create))
            {
                memoryStream.Seek(0, SeekOrigin.Begin);
                memoryStream.CopyTo(fileStream);
            }
        }

}

stream.Close();
await stream.DisposeAsync();
0

There are 0 best solutions below