检查Excel工作簿是否已打开

Rab*_*bin 12 c# visual-studio-2005 excel-2007

有没有办法查看Excel工作簿,比如说DataSheet.xls是否已打开(正在使用中)?如果它被打开,我想关闭该工作簿.

mar*_*tin 13

正确的方法是检查Application.Workbooks对象.在VBA中你会写:

Dim wb as Workbook
On Error Resume Next                       '//this is VBA way of saying "try"'
Set wb = Application.Workbooks(wbookName)
If err.Number = 9 then                     '//this is VBA way of saying "catch"'
    'the file is not opened...'
End If
Run Code Online (Sandbox Code Playgroud)

换句话说,Workbooks是所有打开的工作簿的数组(或VBA术语,Collection).

在C#中,以下代码有效:

    static bool IsOpened(string wbook)
    {
        bool isOpened = true;
        Excel.Application exApp;
        exApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
        try
        {
            exApp.Workbooks.get_Item(wbook);
        }
        catch (Exception)
        {
            isOpened = false;
        }
        return isOpened;
    }
Run Code Online (Sandbox Code Playgroud)

您可能希望自己将引用传递给Excel.Application.

  • C#版本在这一天对我不起作用.始终引发异常并返回false.w69rdy解决方案为我做了伎俩. (2认同)

Iai*_*ard 9

试试这个:

try
{
   Stream s = File.Open(FileName, FileMode.Open, FileAccess.Read, FileShare.None);

   s.Close();

   return true;
}
catch (Exception)
{
   return false;
}
Run Code Online (Sandbox Code Playgroud)

这将尝试独占打开文件.如果文件已经打开,它将抛出异常,然后您可以(尝试)关闭它并继续.