Workbooks.Open() 方法可以检测文件是否已经打开吗?

Can Workbooks.Open() method detect whether file is already open?

有很多类似的问题,但不完全是我要找的。

我在 C# 中使用 Excel Interop 来处理 excel 文件。我想具体知道 Excel Interop 的 Workbooks.Open() 方法是否可以检测文件是否已经打开。是否有任何我们可以设置的参数,以便 Workbooks.Open() 方法在文件已被其他用户打开时引发异常。目前,如果文件正在被其他用户使用,它似乎不会引发任何异常。

请使用 Workbooks.Open() 确定是否可行的答案。 Whosebug 上已经有与为此目的使用 System.IO.File 有关的答案。

您可以使用 Try catch 和 workbooks.open() 方法来了解文件是否 open.even 尽管还有其他特定方法可以 return 如果文件在另一个进程中打开,您的想法有点像这样simple.try

try
{
workbooks.open(filename);
}
catch(exception e)
{
msgbox(e)
}

希望它helps.you可以在这里找到更多细节check if workbook is open

如果工作簿已被同一个 excel 进程打开:

您可以遍历 Workbooks 集合并检查该文件是否存在于集合中。它应该表明文件已经打开。

bool isOpened = workbooks.FirstOrDefault(p=>p.Fullname == filename);

if (!isOpened){
  workbooks.Open(filename);
}

如果工作簿已经被其他进程打开:

Workbooks.Open支持以下参数

string Filename 
Object UpdateLinks,
Object ReadOnly,
Object Format,
Object Password,
Object WriteResPassword,
Object IgnoreReadOnlyRecommended,
Object Origin,
Object Delimiter,
Object Editable,
Object Notify,
Object Converter,
Object AddToMru,
Object Local,
Object CorruptLoad

Open 方法没有为您的行为提供任何参数。或者,您可以在可编辑模式下打开文件并检查工作簿的 属性 ReadOnly 以查看该文件是否可能正在被另一个进程使用。

var workbook = workbooks.Open(fileName,
                Type.Missing, false, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

if (workbook.ReadOnly){
  // is probably opened by another process;
}