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

时间:2012-08-06 21:15:45

标签: c++ excel com automation

我正在实现Excel的界面。我正在使用COM直接从C ++自动化Excel。我的大部分申请都是可靠的。

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

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

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

类似的问题是,在我的程序中启动模拟后,我想阻止用户在写入模式下打开文件(只读模式正常)。

1 个答案:

答案 0 :(得分:1)

我不使用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
}

修改

你也可能想看到这个?

主题:FileInfo :: IsReadOnly属性

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

引用来自上方链接

  

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

     

命名空间:System.IO

     

程序集:mscorlib(在mscorlib.dll中)