2

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

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

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

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

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

4

1 回答 1

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 中)

于 2012-08-07T00:37:12.477 回答