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

6

Epplus C# | 如何处理已经打开(正在使用)的 Excel 文件。它只能在 Excel 文件关闭时才能操作。我可以在代码执行之前先将其关闭,然后再重新打开,但我认为这不是一个好方法,因为我的文件包含超过 50000 行(文件大小很大)。请建议如何解决此问题。

提前感谢您的帮助。

2个回答

8

只有在第三方打开文件进行读取时才可以实现,但不能进行写入操作。

如果第三方已经打开了该文件进行写入操作,则您试图仅仅以读取方式打开同一文件的尝试会导致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);

会正常工作。但下面片段的第二行:

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

这将导致一个 System.IO.IOException 异常。


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(),则会抛出异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接