14

我想用 C# 读取已经打开的 excel 文件。我正在使用这种方法,但是当文件在 Microsoft excel 中打开时,它无法读取 excel 文件。

FileStream stream = File.Open("myfile.xlsx", FileMode.Open, FileAccess.Read);

它给IOException: The process cannot access the file 'myfile.xlsx' because it is being used by another process.

我希望你明白我的意思。我想保持 excel 文件打开,当文件在 Microsoft excel 中打开时,我想从 C# 中读取它。我正在使用 C# 网络框架 4.0

4

6 回答 6

25

您需要使用 FileShare.ReadWrite 打开它:

FileStream stream = File.Open("myfile.xlsx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

看到这个答案

于 2012-02-20T05:09:28.970 回答
7

我认为您仍然可以在excel打开文件时复制文件,因此您可以复制文件然后打开它。只需确保在完成副本后自行清理即可。

于 2011-02-14T12:59:30.350 回答
3

您可以使用 Interop 库来使用已打开的 Excel 实例。

oExcel == (Excel.Application) System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application")
于 2011-02-14T12:50:00.780 回答
1

您可以尝试使用第四个参数 - fileShare 的 File.Open。

FileStream stream = File.Open("myfile.xlsx", FileMode.Open, FileAccess.Read, FileShare.Read);

您可能还需要指定写访问权限。

于 2011-02-14T12:46:31.443 回答
0

为确保正确打开和关闭文件请查看使用 c# using 语句

using (FileStream stream = File.Open("myfile.xlsx", FileMode.Open, FileAccess.Read)) 
{

}
于 2011-02-14T12:29:20.197 回答
0

要同时多次打开同一个文件,需要以共享模式打开。

希望这可以帮助其他人。

于 2012-10-28T20:14:22.030 回答