| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2167 人关注过本帖
标题:如何获取人工打开的Excel对象
只看楼主 加入收藏
easyppt
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:242
专家分:455
注 册:2021-11-24
收藏
得分:0 
csyx  和 吹版  太厉害了,分析的好详细啊!

期待 吹版 能解决啊!!
2022-04-17 01:47
sych
Rank: 4
等 级:业余侠客
威 望:7
帖 子:237
专家分:290
注 册:2019-10-11
收藏
得分:0 
https://blog.
这是一个大师级的总结,可以终结这个话题
2022-04-17 07:21
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10543
专家分:42958
注 册:2014-5-20
收藏
得分:0 
以下是引用sych在2022-4-17 07:21:44的发言:

https://blog.
这是一个大师级的总结,可以终结这个话题

这个大师总结的是VFP用CreateObject()和GetObject()创建Excel对象。
这个话题的第9楼谈到是用MSAA的IAccessible接口获取Excel对象。
VFP的CreateObject()和GetObject()与MSAA的IAccessible接口有无关系就不清楚,但MSAA的IAccessible接口是windows API 的东西,层面应该更低些。
不能轻易就说“可以终结这个话题”吧
2022-04-17 18:05
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10543
专家分:42958
注 册:2014-5-20
收藏
得分:0 
回复 11楼 easyppt
以下是引用easyppt在2022-4-15 15:23:34的发言:

VFP要控制的的Excel不是VFP打开的,而是人工打开的,能实现吗,怎么获取

具体情况不明,不只是看看有无EXCEL在运行吧,是就在当前进程表里找有无EXCEL进程,有可能还不只一个EXCEL进程。
2022-04-17 18:23
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:641
专家分:2476
注 册:2018-3-13
收藏
得分:0 
吹版威武哈,你贴的截图是自己做的vfp版Inspect ?

这家伙很懒,啥也没留下
2022-04-17 18:36
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:641
专家分:2476
注 册:2018-3-13
收藏
得分:0 
以下是引用吹水佬在2022-4-17 18:23:15的发言:
具体情况不明,不只是看看有无EXCEL在运行吧,是就在当前进程表里找有无EXCEL进程,有可能还不只一个EXCEL进程。

是的,不一定只有一个Excel实例在运行中,所以应该枚举出所有的Excel对象并返回一个集合给调用者,调用者可以根据book.FullPath来判断哪个是他需要的Excel对象
虽然使用了MSAA的AccessibleObjectFromWindow函数,但需要的功能与IAccessible接口并没多大关系,只需要用OBJID_NATIVEOM来获取IDispatch接口即可

这家伙很懒,啥也没留下
2022-04-17 18:45
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10543
专家分:42958
注 册:2014-5-20
收藏
得分:0 
以下是引用csyx在2022-4-17 18:36:24的发言:

你贴的截图是自己做的vfp版Inspect ?

以前学习MSAA时写的,为省点时间用VFP写。
2022-04-18 07:01
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10543
专家分:42958
注 册:2014-5-20
收藏
得分:0 
以下是引用csyx在2022-4-17 18:45:28的发言:

虽然使用了MSAA的AccessibleObjectFromWindow函数,但需要的功能与IAccessible接口并没多大关系,只需要用OBJID_NATIVEOM来获取IDispatch接口即可


    MSAA的全称是Microsoft Active Accessibility。这是类似DCOM技术。技术模型是这样的,UI程序可以暴露出一个Interface,方便另一个程序对其进行控制。MSAA技术的初衷是为了方便残疾人使用Windows 程序。比如盲人看不到窗口,但是盲人可以通过一个USB读屏器连接到电脑上,读屏器通过UI程序暴露出来的这个Interface,就可以获取程序信息,通过盲文或者其它形式传递给盲人。

    MSAA提供了如此方便的功能, UI自动化测试自然可以借用这项技术。MSAA暴露出来的Interface叫做 IAccessible。
2022-04-18 07:04
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:641
专家分:2476
注 册:2018-3-13
收藏
得分:0 
我意思是使用AccessibleObjectFromWindow的目的,是用名为Excel7窗口的句柄,加上OBJID_NATIVEOM和IID参数,就得到了Excel.Workbook的COM界面指针,足以满足楼主提出的要求,不怎么需要用到IAccessible接口提供的其他功能,MSAA的典型应用自然是遍历用户界面的内部对象

这家伙很懒,啥也没留下
2022-04-18 08:50
sych
Rank: 4
等 级:业余侠客
威 望:7
帖 子:237
专家分:290
注 册:2019-10-11
收藏
得分:0 
这个帖子是“如何获取人工打开的Excel对象”?
下面的代码可以实现获取人工打开的EXCEL文件对象
测试环境 WINDOWS 7 旗舰版,VFP9,OFFICE 2016 专业增强版
ole2 = getobject( ,'excel.application' )
?ole2.Workbooks.Count
for i=1 to ole2.Workbooks.Count
?ole2.Workbooks(i).name
next


[此贴子已经被作者于2022-4-18 09:17编辑过]

2022-04-18 09:11
快速回复:如何获取人工打开的Excel对象
数据加载中...
 
   



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

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