Я столкнулся с той же проблемой, когда пытался открыть существующий файл 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, даже если пароль пуст, НО НЕ НУЛЯЕТ.
Однако, если вы попытаетесь инициализировать пакет для файла, который не зашифрован, у вас будет исключение:
'Поток не является допустимым / поддерживаемым зашифрованным документом.'