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();