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

时间:2015-04-28 05:41:17

标签: c# excel-interop

有许多类似的问题,但不完全是我正在寻找的。

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

请使用Workbooks.Open()确定是否可以做出回答。 stackoverflow上已经有与为此目的使用System.IO.File相关的答案。

2 个答案:

答案 0 :(得分:0)

如果工作簿已由同一个Excel流程打开:

您可以遍历bool isOpened = workbooks.FirstOrDefault(p=>p.Fullname == filename); if (!isOpened){ workbooks.Open(filename); } 集合并检查该集合中是否存在该文件。它应该表明该文件已经打开。

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

如果某个其他流程已打开工作簿:

Workbooks.Open支持以下参数

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;
}

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

protected void Application_BeginRequest(object sender, EventArgs e)
{
    if (HttpContext.Current.Request.RawUrl == "/edmonton/clickme")
        HttpContext.Current.RewritePath("/Default.aspx/clickme");
}

答案 1 :(得分:-1)

你可以使用带有workbooks.open()方法的Try catch来了解文件是否是open。虽然如果文件在另一个进程中打开,还有其他特定的方法可以返回,你的想法有点简单。像这样

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

希望它有所帮助。您可以在check if workbook is open

找到更多详细信息