Epplus Csharp | 如何操作已打开(正在使用)的 Excel 文件。它仅在 Excel 文件关闭时有效。我可以在代码执行之前关闭并再次重新打开,但不要认为这是一种方法,因为我的文件包含超过 50000 行(文件很大)。请指教,如何解决。
提前致谢
Epplus Csharp | 如何操作已打开(正在使用)的 Excel 文件。它仅在 Excel 文件关闭时有效。我可以在代码执行之前关闭并再次重新打开,但不要认为这是一种方法,因为我的文件包含超过 50000 行(文件很大)。请指教,如何解决。
提前致谢
不要使用 FileInfo 打开 ExcelPackage 工作簿,而是使用流:
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
ExcelPackage pkg = new ExcelPackage(fs);
在 excel 中打开路径指定的工作簿后,您将能够从文件中读取行,但如果您尝试调用ExcelPackage.Save()
.
只有当文件被第三方打开读取而不是写入时才有可能。
如果第三方打开文件进行写入,您尝试打开同一个文件即使只是为了读取也会导致System.IO.IOException
. 事实上,这完全是关于EpPlus 和 ExcelPackage 的FileStream
,而不是特定于 EpPlus 和 ExcelPackage 的。.NET 方面的示例:
var fileStream1 = new FileStream(@"File.ext", FileMode.Open, FileAccess.Read);
var fileStream2 = new FileStream(@"File.ext", FileMode.Open, FileAccess.Read);
会工作得很好。但以下片段的第二行:
var fileStream1 = new FileStream(@"File.ext", FileMode.Open, FileAccess.Write);
var fileStream2 = new FileStream(@"File.ext", FileMode.Open, FileAccess.Read);
将导致一个System.IO.IOException
.