How to create Excel file using OpenXML without creating a local file?
Adding another answer as I spent way too much time searching for this: Another way to save a SpreadsheetDocument to a stream is by calling SpreadsheetDocument.Clone(Stream s)
It has the benefit of letting you save to a stream even if you created the document from a file or a stream you don't want to save to.
You could use the overload of SpreadsheetDocument.Create
that takes a Stream
and pass it a MemoryStream
:
MemoryStream memoryStream = new MemoryStream();
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(memoryStream, SpreadsheetDocumentType.Workbook);
//add the excel contents...
//reset the position to the start of the stream
memoryStream.Seek(0, SeekOrigin.Begin);
return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
Note that as per this StackOverflow question you don't need to dispose the Stream as it will be done for you by the FileStreamResult
class.