Epplus Csharp | 如何操作已打开(使用中)的Excel文件

use*_*961 5 epplus

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

提前致谢

小智 6

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

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

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


Dei*_*lan 5

仅当打开文件以供第三方读取而不能写入时才有可能

如果第三方打开了该文件以进行写入,则即使试图读取也要打开同一文件,都将导致System.IO.IOException。实际上,这FileStream与EpPlus和ExcelPackage 有关,而不是特定的。关于.NET的示例:

var fileStream1 = new FileStream(@"File.ext", FileMode.Open, FileAccess.Read);
var fileStream2 = new FileStream(@"File.ext", FileMode.Open, FileAccess.Read);
Run Code Online (Sandbox Code Playgroud)

会很好。但是以下片段的第二行:

var fileStream1 = new FileStream(@"File.ext", FileMode.Open, FileAccess.Write);
var fileStream2 = new FileStream(@"File.ext", FileMode.Open, FileAccess.Read);
Run Code Online (Sandbox Code Playgroud)

将导致System.IO.IOException