| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1043 人关注过本帖
标题:请教:如何捕捉到关闭EXCEL文件的动作
只看楼主 加入收藏
zhousr
Rank: 2
等 级:论坛游民
威 望:1
帖 子:266
专家分:47
注 册:2019-3-8
结帖率:94.59%
收藏
已结贴  问题点数:20 回复次数:13 
请教:如何捕捉到关闭EXCEL文件的动作
调用EXCEL打开一个XLSX文件后,我要使程序暂停,在暂停时浏览文件,浏览结束后,关闭这个文件,并删除其中一列,然后保存,并发送给人家。我现在用的是  wait "",wait需要我在关闭EXCEL文件后再点击任意键才能继续后续操作。有时会忘了点击而直接把文件发送出去,这样该删除的一列就没删除。
WAIT既然能够捕捉到鼠标单击动作,应该也能捕捉到关闭EXCEL文件的动作,然后执行一个点击动作。
那么,在WAIT状态下,如何捕捉到关闭EXCEL文件的动作呢?
谢谢!
搜索更多相关主题的帖子: 关闭 wait 捕捉 EXCEL 文件 
2023-05-21 16:32
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:5 
调用EXCEL打开一个XLSX文件的代码?
2023-05-21 17:10
shizi0
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:131
专家分:409
注 册:2012-10-2
收藏
得分:5 
1、建一个Timer,检测你创建的Excel进程,或窗口句柄。
2、Timer开始工作时,弹出一个顶层无模式表单Form1(可以设为不可见,也可以提示“等待Excel操作...”,总之目的是本应用不可操作)。当然觉得可以的话也可以隐藏整个应用窗口
3、Timer发现创建的Excel进程不见了,则停止Timer工作,关闭Form1。或恢复应用窗口
2023-05-21 17:23
zhousr
Rank: 2
等 级:论坛游民
威 望:1
帖 子:266
专家分:47
注 册:2019-3-8
收藏
得分:0 
EXCEL在之前已经启动,打开文件是用:
oExcel..WorkBooks.Open("&lj\zycxjg\&xk&wch..xlsx")
2023-05-21 17:27
shizi0
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:131
专家分:409
注 册:2012-10-2
收藏
得分:0 
回复 4楼 zhousr
那很好办,检测oExcel是否没了,或打开的books是否没了
2023-05-21 17:31
pvm2000
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:180
专家分:312
注 册:2022-12-22
收藏
得分:5 
以下是引用shizi0在2023-5-21 17:31:24的发言:

那很好办,检测oExcel是否没了,或打开的books是否没了

方案可行
2023-05-22 01:58
zhousr
Rank: 2
等 级:论坛游民
威 望:1
帖 子:266
专家分:47
注 册:2019-3-8
收藏
得分:0 
网上看到的代码:
LOCAL lOldSetOpt,mChanNum
lOldSetOpt = DDESetOption("SAFETY")
= DDESetOption("SAFETY",.F.)
mChanNum = DDEInitiate('Excel','&lj\zycxjg\&xk&wch..xlsx')     &&lcFileName某XLS文件名,如:D:\123.XLS
IF mChanNum <> -1
WAIT ""
ELSE
Click
ENDIF

能WAIT,但关闭EXCEL文件后, Click没执行,是不是用错了还是放错地方了?
2023-05-22 07:40
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:0 
以下是引用zhousr在2023-5-22 07:40:29的发言:

网上看到的代码:
LOCAL lOldSetOpt,mChanNum
lOldSetOpt = DDESetOption("SAFETY")
= DDESetOption("SAFETY",.F.)
mChanNum = DDEInitiate('Excel','&lj\zycxjg\&xk&wch..xlsx')     &&lcFileName某XLS文件名,如:D:\123.XLS
IF mChanNum <> -1
WAIT ""
ELSE
Click
ENDIF

能WAIT,但关闭EXCEL文件后, Click没执行,是不是用错了还是放错地方了?

既然已经交给用户去处理,有可能关闭WorkBook而没关闭EXCEL的情况,如:
图片附件: 游客没有浏览图片的权限,请 登录注册

或者试试检测窗口是否打开状态,看能否满足要求。
程序代码:
DECLARE long IsWindowVisible IN user32 long
excel = CREATEOBJECT("Excel.Application")
excel.Visible = 1
DO WHILE IsWindowVisible(excel.hWnd) != 0
    INKEY(1)
ENDDO
? "EXCEL关闭了"

2023-05-22 09:54
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:995
专家分:4966
注 册:2013-2-16
收藏
得分:5 
只监控后台有无excel进程,我觉得不可取.很多用户的习惯,是同时打开多个excel,
所以 ,先收集后台进程,找出要监控的进程的pid. 这个步骤不可少.
最后,用一个timer监控这个进程pid是否还在.
大致流程就是这样,代码没时间写.
2023-05-22 10:40
zhousr
Rank: 2
等 级:论坛游民
威 望:1
帖 子:266
专家分:47
注 册:2019-3-8
收藏
得分:0 
谢谢吹版,我愚钝,还是没搞定
WAIT之后的代码,要按任意键以后才会继续执行。我想,可能要非常底层的层面才能捕捉到某些动作吧?(我瞎猜的
2023-05-22 11:04
快速回复:请教:如何捕捉到关闭EXCEL文件的动作
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.091436 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved