使用带有MemoryStream的EPPlus
我正在使用EPPlus在C#中生成XLSX文件。 只要我用一个内存stream实例化ExcelPackage – 我得到的错误:
“在写入操作期间发生磁盘错误(从HRESULTexception:0x8003001D(STG_E_WRITEFAULT))”
代码是:
MemoryStream stream = new MemoryStream(); using (ExcelPackage package = new ExcelPackage(stream)) { ... }
有没有人看过这个?
没有其他的答案让我在那里(Excel工作表总是空的),但这对我工作:
using (var package = new ExcelPackage()) { var worksheet = package.Workbook.Worksheets.Add("Worksheet Name"); worksheet.Cells["A1"].LoadFromCollection(data); var stream = new MemoryStream(package.GetAsByteArray()); }
我知道这个问题是在几个月前回答的,但这是我如何做的,以供将来参考任何尝试的人:
在VB.NET中:
Dim stream As New MemoryStream Using package As New ExcelPackage(stream) 'Here goes the ExcelPackage code etc package.Save() End Using
在C#中:
MemoryStream stream = new MemoryStream(); using (ExcelPackage package = new ExcelPackage(stream)) { //Here goes the ExcelPackage code etc package.Save() }
就我所知,C#代码应该是正确的。 ExcelPackage内置了对stream的支持。
如果你想继续使用一个stream(比如Response.OutputStream),你可以使用一个空的构造函数创build一个ExcelPackage,并使用SaveAs(Stream OutputStream )方法。
它看起来像是在ExcelPackage构造函数的error handling程序中遇到错误。 如果您尝试给它一个空的stream, System.IO.Packaging.Package.Open
引发一个exception指示,指出一个包不能为空。
即使文件不存在,此代码也可以正常工作:
var file = new FileInfo("test.xlsx"); using (ExcelPackage package = new ExcelPackage(file)) { }
考虑到构造函数重载的文档表明该stream允许为空,我build议在EPPlus问题跟踪器中提出这个问题。
您可以使用空的构造函数创build一个ExcelPackage。 它将处理自己的内部缓冲区。
http://epplus.codeplex.com/wikipage?title=WebapplicationExample