当我试图打开现有的 excel 文件并花了几天时间时,我遇到了同样的问题。就我而言,由于加密,我收到了提到的异常“写入操作期间发生磁盘错误。(来自 HRESULT 的异常:0x8003001D(STG_E_WRITEFAULT))”。
我能够通过传递密码来读取 .xlsx 文件。在我的情况下,空字符串“”就足够了。
在您的情况下,请尝试使用带密码的构造函数初始化包:
public ExcelPackage(Stream newStream, string Password)
package = new ExcelPackage(stream, "");
查看 ExcelPackage 源代码http://epplus.codeplex.com/SourceControl/latest#EPPlus/ExcelPackage.cs
有一种方法
private void Load(Stream input, Stream output, string Password)
用于加载excel文件。
private void Load(Stream input, Stream output, string Password)
...
if (Password != null)
{
Stream encrStream = new MemoryStream();
CopyStream(input, ref encrStream);
EncryptedPackageHandler eph = new EncryptedPackageHandler();
Encryption.Password = Password;
ms = eph.DecryptPackage((MemoryStream)encrStream, Encryption);
}
else
{
ms = new MemoryStream();
CopyStream(input, ref ms);
}
...
即使密码为空,代码也会尝试解密 excel 流,但不是 NULL。
但是,如果您尝试为未加密的文件初始化包,您将遇到异常:
'该流不是有效/受支持的加密文档。'