Epplus C# | 如何处理已经打开(正在使用)的 Excel 文件。它只能在 Excel 文件关闭时才能操作。我可以在代码执行之前先将其关闭,然后再重新打开,但我认为这不是一个好方法,因为我的文件包含超过 50000 行(文件大小很大)。请建议如何解决此问题。
提前感谢您的帮助。
Epplus C# | 如何处理已经打开(正在使用)的 Excel 文件。它只能在 Excel 文件关闭时才能操作。我可以在代码执行之前先将其关闭,然后再重新打开,但我认为这不是一个好方法,因为我的文件包含超过 50000 行(文件大小很大)。请建议如何解决此问题。
提前感谢您的帮助。
只有在第三方打开文件进行读取时才可以实现,但不能进行写入操作。
如果第三方已经打开了该文件进行写入操作,则您试图仅仅以读取方式打开同一文件的尝试会导致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
异常。
不要使用FileInfo来打开ExcelPackage工作簿,而应该使用流:
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
ExcelPackage pkg = new ExcelPackage(fs);
使用在excel中指定的路径打开的工作簿,你将能够从文件中读取行,但如果试图调用ExcelPackage.Save()
,则会抛出异常。