如何使用OpenXML创建Excel文件而不创建本地文件?

时间:2015-04-27 04:59:05

标签: c# excel spreadsheet openxml openxml-sdk

是否可以使用OpenXML SDK创建和编辑Excel文档而无需创建本地文件?

根据文档Create方法需要filepath,它会创建文件的本地副本。

SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook);

我在这里引用MSDN文章: https://msdn.microsoft.com/en-us/library/office/ff478153.aspx

我的要求是创建文件,浏览器应该点击按钮下载。

有什么建议吗?

2 个答案:

答案 0 :(得分:27)

您可以使用SpreadsheetDocument.Create的重载,其Stream传递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");

请注意,根据this StackOverflow question,您不需要像FileStreamResult类一样为您处理流。

答案 1 :(得分:0)

添加另一个答案,因为我花了太多时间进行搜索:将SpreadsheetDocument保存到流中的另一种方法是调用SpreadsheetDocument.Clone(Stream s)

它的好处是,即使您是从不想保存到的文件或流中创建文档的,也可以将其保存到流中。