我正在使用EPPlus在C#中生成XLSX文件.一旦我用内存流实例化ExcelPackage - 我收到错误:
"写操作期间发生磁盘错误.(HRESULT异常:0x8003001D(STG_E_WRITEFAULT))"
代码是:
MemoryStream stream = new MemoryStream();
using (ExcelPackage package = new ExcelPackage(stream))
{
...
}
Run Code Online (Sandbox Code Playgroud)
有没有人见过这个?
Noa*_*man 63
没有其他答案让我在那里(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());
}
Run Code Online (Sandbox Code Playgroud)
Rei*_*ein 19
我知道这个问题已在几个月前得到解答,但这是我今后如何参考任何人尝试的方法:
在VB.NET中:
Dim stream As New MemoryStream
Using package As New ExcelPackage(stream)
'Here goes the ExcelPackage code etc
package.Save()
End Using
Run Code Online (Sandbox Code Playgroud)
在C#中:
MemoryStream stream = new MemoryStream();
using (ExcelPackage package = new ExcelPackage(stream))
{
//Here goes the ExcelPackage code etc
package.Save()
}
Run Code Online (Sandbox Code Playgroud)
据我所知,C#代码应该是正确的.ExcelPackage内置了对流的支持.
Dan*_*nny 14
如果要继续使用流(例如Response.OutputStream),可以使用空构造函数创建ExcelPackage并使用SaveAs(Stream OutputStream)方法.
看起来你正在点击ExcelPackage构造函数的错误处理程序中的错误.如果您尝试将其System.IO.Packaging.Package.Open设为空流,则会引发一个异常指示,指出包不能为空.
即使该文件不存在,此代码也可以工作:
var file = new FileInfo("test.xlsx");
using (ExcelPackage package = new ExcelPackage(file))
{
}
Run Code Online (Sandbox Code Playgroud)
鉴于构造函数重载的文档指示允许流为空,我建议在EPPlus问题跟踪器中提出此问题.