如何使用 OLE 检查文件是否在 Excel 中打开(使 Excel 进程保持打开状态)
如何检查文件是否已在某些 Excel 实例中打开?
我使用 DXL (DOORS) 语言,但它应该独立于该语言。
是否有任何 OLE 方法可以调用来检查打开了哪个文件并将其与路径/文件名进行比较?
如果可能的话,我可以只关闭该 Excel 应用程序中的工作表/文件吗?
编辑: 这就是我到目前为止所得到的,这有效但只能一次。 DXL 使 Excel.exe 进程保持打开状态,并在接下来的检查中检查所使用的实例是否没有打开的工作簿,甚至根本没有窗口。
if (confirm "File \"" fPath "\" already exists. Do you want to overwrite it?") {
// check if file is opened in any Excel instance
OleAutoObj oleWorkbooks = null;
OleAutoObj oleExcel = null;
OleAutoObj oleWorkbook = null;
OleAutoArgs autoArgs = create;
oleExcel = oleGetAutoObject("Excel.Application");
bool opened = false;
// if excel is opened
if(oleExcel != null){
d("Excel is opened");
// Get workbooks and open file
oleGet(oleExcel,"Workbooks", oleWorkbooks);
// compare each open workbook
int count = 0;
oleGet(oleWorkbooks,"Count", count);
string workbookname = "";
string sPath = replace(fPath, "\\", "/");
sPath = stripPath(sPath, true);
while (count > 0) {
d("checking opened document");
clear(autoArgs);
put(autoArgs, count);
oleGet(oleWorkbooks,"Item", autoArgs, oleWorkbook);
oleGet(oleWorkbook, "Name", workbookname);
opened = sPath == workbookname;
if(opened) {
if(confirm "The file is currently opened in Excel. It must be closed. Do you want to close the document?") {
clear(autoArgs);
oleMethod(oleWorkbook,"Close",autoArgs);
}
break;
}
count--;
}
}
oleCloseAutoObject(oleExcel);
oleCloseAutoObject(oleWorkbooks);
oleCloseAutoObject(oleWorkbook);
// todo leaves excel process open
if(!opened) {
streamOutputData = write fPath;
streamOutputData << sOutput;
close streamOutputData;
return true;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用现有的 DXL 方法 canOpenFile(string path, bool write) 解决了这个问题:
solved it using existing DXL method canOpenFile(string path, bool write):
我不知道 DXL,但这就是您可以在 VBA 中执行的操作,我让您将其调整为 DXL:
改编自 这里
I don't know DXL but this is what you could do in VBA, I let you adapt it to DXL:
Adapted from here