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.
试试这个:
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)
这将尝试独占打开文件.如果文件已经打开,它将抛出异常,然后您可以(尝试)关闭它并继续.