5

Epplus Csharp | 如何操作已打开(正在使用)的 Excel 文件。它仅在 Excel 文件关闭时有效。我可以在代码执行之前关闭并再次重新打开,但不要认为这是一种方法,因为我的文件包含超过 50000 行(文件很大)。请指教,如何解决。

提前致谢

4

2 回答 2

8

不要使用 FileInfo 打开 ExcelPackage 工作簿,而是使用流:

FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
ExcelPackage pkg = new ExcelPackage(fs);
  • path 是您将用于 FileInfo 的文件的路径
  • FileMode 说你想打开它
  • FileAccess 说你想读
  • FileShare 说其他程序可以读/写。

在 excel 中打开路径指定的工作簿后,您将能够从文件中读取行,但如果您尝试调用ExcelPackage.Save().

于 2018-04-02T23:55:42.113 回答
7

只有当文件被第三方打开读取而不是写入时才有可能。

如果第三方打开文件进行写入,您尝试打开同一个文件即使只是为了读取也会导致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.

于 2014-12-23T02:16:36.580 回答