如何可靠地确定文件是否已在 Microsoft Excel 中打开
How do I reliably determine if a file is already opened in Microsoft Excel?
我正在实现一个与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)
相关文章:
- 当Microsoft文档仅包含 C# 示例时,如何查找 C++ 包含文件名
- 带有 CKKS 的 Microsoft 密封中的矢量点积
- 如何添加预防措施以绕过未注册Microsoft.ACE.OLEDB.12.0?
- 与其他编译器相比,相同的代码在工作室Microsoft提供不同的输出
- 使用 Outlook 2016 Microsoft Store 连接到 Outlook COM
- 如何在 SEAL 3.1 中使用 CRT 批处理技术Microsoft?
- 使用 CMake,Microsoft MPI 和 Visual Studio 2017 找不到 mpi.h
- 如何在视觉c ++项目中添加箭头键作为修饰键Microsoft
- 为什么Microsoft在新代码中使用结构而不是类?
- Microsoft C++ 用于图形 API 的 Rest SDK
- Microsoft ODBC 无法创建有效的句柄
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 使用IMFSourceReader(Microsoft媒体基金会)进行音频流传输
- 在传递 com 变体时运行 excel 宏崩溃
- 使用来自 Excel VBA 的 C++ dll 时"Bad DLL calling convention" - 如何解决?
- C++ VS 错误:<实验/文件系统>提供 std::experimental::文件系统的标头已被Microsoft弃用,将被删除
- 如何使用"Microsoft Excel SDK 2013"和VS2015社区构建Excel插件?
- 解析从 Excel 导出Microsoft csv 文件
- 如何可靠地确定文件是否已在 Microsoft Excel 中打开
- DLL 导致"Microsoft Excel has stopped working"但它在 Win32 控制台应用中工作正常