如果我理解正确,您实际上想查找此 winform 应用程序是否已打开某些文件,对吗?
如果是这样,我认为它应该相当简单 - 只需将打开的工作簿缓存到某个字典左右:
static Dictionary<string, Workbook> _openedWorkBooks = new Dictionary<string, Workbook>();
public static Workbook GetWorkbook(string filePath) {
Workbook wkb = null;
if (!(_openedWorkBooks.TryGetValue(filePath, out wkb)))
{
// Open the file and store it into the dictionary
}
return wkb;
}
// remember to remove it when it's closed
public static CloseWorkbook()
{ // need to remove the corresponding key from the dictionary
}
此外,您也可以使用 excel 应用程序的单个实例,然后可以从 App.Workbooks 中检索所有打开的工作簿,但是,它有时会引发一些异常(不知道为什么,但我之前确实遇到过)。
var app = new Microsoft.Office.Interop.Excel.Application();
var bk1 = app.Workbooks.Open("c:\temp\myfile.xls");
var allOpenBks = app.Workbooks;
实际上还是值得调用 IsFileLock 方法来检查文件是否已被其他应用程序打开,否则可能会遇到一些错误。