如何可靠地确定文件是否已在 Microsoft Excel 中打开

How do I reliably determine if a file is already opened in Microsoft Excel?

本文关键字:Microsoft Excel 是否 何可 文件      更新时间:2023-10-16

我正在实现一个与Excel的接口。我正在使用COM直接从C++自动化Excel。我的大部分应用程序都运行可靠。

但是,我无法检测到文件是否已在Excel中打开。如果它是打开的,那么我想通知用户在运行模拟之前关闭它。

我没有使用 MFC、VB 或 .NET。我的解决方案必须适用于 Excel 版本 97 到 2010。如果我能以编程方式知道 Excel 的版本,则可以对不同的 excel 版本使用不同的技术。

我在同一文件夹中查找名为"~$xxx"(其中"xxx"是原始文件名)的文件,以确定 Excel 是否已创建会话锁。但是这种技术并不总是有效。

一个类似的问题是,一旦在我的程序中启动模拟,我想阻止用户以写入模式打开文件(只读模式是可以的)。

我不使用

C++ 但使用 VB.net 中的相同逻辑,这个C++代码可能应该做你想做的事?不过我还没有测试过...这也不需要您检查任何特定的 Excel 版本。对于.xlsx或任何其他扩展,只需替换下面的扩展。

std::ofstream ofs("MyFile.xls");
if(ofs.is_open())
{
    //~~> File is ready for output
}
Else
{
    //~~> File is NOT ready for output
}

编辑

您可能还想看到这个?

主题:文件信息::是只读属性

链接: http://msdn.microsoft.com/en-us/library/system.io.fileinfo.isreadonly.aspx#Y0

引用上面的链接

获取或设置一个值,该值确定当前文件是否为只读文件。

命名空间:System.IO

汇编: mscorlib

(in mscorlib.dll)