我正在实现Excel的界面。我正在使用COM直接从C ++自动化Excel。我的大部分申请都是可靠的。
但我无法检测文件是否已在Excel中打开。如果它是打开的,那么我想告知用户在运行模拟之前关闭它。
我没有使用MFC,VB或.NET。我的解决方案必须适用于Excel版本97到2010.如果我能以编程方式了解Excel的版本,则可以针对不同的Excel版本使用不同的技术。
我在同一文件夹中查找名为“〜$ xxx”(其中“xxx”是原始文件名)的文件,以确定Excel是否已创建会话锁定。但这种技术并不总是有效。
类似的问题是,在我的程序中启动模拟后,我想阻止用户在写入模式下打开文件(只读模式正常)。
答案 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中)