ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2611|回复: 6

[求助]版主这回我说的详细些

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-11-25 12:07 | 显示全部楼层 |阅读模式

我首先打开一个32.doc文档,然后向文档里插入一个ActiveX控件,我写的是一个win32 的DLL来实现这一过程。当然32.doc是手动先打开的。我的代码里的相关部分。_ApplicationPtr m_app;m_app->createInstance("Word.Application");当然m_app总是成功的,但我想知道m_app是不是32.doc的application,我估计不是,但是我怎么才能获得32.doc的applicaiton呢。也许获得不到。那么守柔先生能不能提供一个解决的方法呢!据我现在的初级水平,我只知道要获得application才能有以后的操作。如_DocumentsPtr m_Doc;m_Doc = m_app->.............

再次感谢您了!

TA的精华主题

TA的得分主题

发表于 2005-11-25 13:47 | 显示全部楼层

我的理解:“首先打开一个32.doc文档......当然32.doc是手动先打开的”,这时windows中就会有一个word.exe的进程,这个进程中的application对象就是指word.exe服务程序。

然后用“m_app->createInstance("Word.Application");”,也会打开另一个word.exe进程,注意此时的word.exe是看不见的,但在任务管理器中可以看到,显然这2个进程的application并非同一个。

你现在希望用m_app对32.doc进行操作是不行的,因为32.doc不是用m_app打开的,32.doc对应的document的父对象不是m_app。

如果希望用m_app对32.doc进行操作,则32.doc须用m_app来打开。或者不用m_app->createInstance("Word.Application")创建实例,而把m_app指向另外一个进程即手工打开32.doc的那个进程中的application,跨进程的指向能否实现以及如何指向我就不清楚了,不知道守柔版主能否解答这个问题。

这个问题到csdn等编程论坛提问也许更合适。

[此贴子已经被作者于2005-11-25 13:51:05编辑过]

TA的精华主题

TA的得分主题

发表于 2005-11-25 14:00 | 显示全部楼层

变通一下可能可以实现,就是通过向打开32.doc的word窗体发送消息来实现对32.doc的操纵,具体如何实现,因对word不太熟悉,我也不知道。

TA的精华主题

TA的得分主题

发表于 2005-11-27 01:30 | 显示全部楼层

晚上查了资料,知道答案了。

在另外一个进程中,可以获取当前已经打开的word.exe的application,vc我不熟悉,delphi代码的示例如下:

procedure TForm1.btn1Click(Sender: TObject);
var
obj_Word ,obj_Doc: OleVariant;
begin
try
obj_Word:=GetActiveOleObject('Word.Application'); //取已打开的application
obj_Word.Visible:=True;
except
obj_Word:=CreateOleObject('Word.Application'); //不存在则创建一个
obj_Word.Visible:=True;
obj_Word.Documents.Add; //创建新文档
end;
obj_Doc:=obj_Word.ActiveDocument; //当前文档
//memo编辑框内容追加到当前文档
obj_Doc.ActiveWindow.Selection.InsertAfter(mmo1.Text);
obj_Word:=Null;
end;

[此贴子已经被作者于2005-11-27 1:43:21编辑过]

TA的精华主题

TA的得分主题

发表于 2005-11-27 01:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
做了一个简单的示例程序,完全的代码程序及可执行程序打包附上,请参考。 nhOpJzWz.rar (161.29 KB, 下载次数: 9)

TA的精华主题

TA的得分主题

发表于 2005-11-27 01:48 | 显示全部楼层
delphi中的GetActiveOleObject在VB中是使用GetOleObject,vc中应该也有相应的方法。

TA的精华主题

TA的得分主题

发表于 2005-11-27 02:11 | 显示全部楼层

在msdn中帮你找到这段代码,看看是否有用?

STDMETHOD(Start)()
{
// If you already have an object, just return
if (m_pApp)
return S_OK;

// Create an instance of Word's Application object
m_pApp.CoCreateInstance(__uuidof(Word::Application), NULL, CLSCTX_SERVER);

// Make the Word user interface visible
m_pApp->put_Visible(true);

// Forge a connection to enable you to receive events
DispEventAdvise(m_pApp);

return S_OK;
}

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 02:34 , Processed in 0.039508 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表