WORD控制老问题,搜索不到还是直接请教了:不用WORD控件,用OLE方式控制WORD不知哪里有详细的资料。(100分)

  • 主题发起人 主题发起人 sunyb
  • 开始时间 开始时间
S

sunyb

Unregistered / Unconfirmed
GUEST, unregistred user!
比如字体格式、表格操作等
 
真的没人帮忙吗?
 
看来一定要用WORD控件了
 
呵呵,
我最近也要用这个东东,
于是就花了两天的时间学了一下,
感觉得效果很好,
把我的一点点心得告诉你吧,
其实很简单的,相信你一个小时就能熟练掌握:
首先你要知道怎么在word中录制宏,
我相信所有的人都会,
然后是将宏改写成delphi的代码。
步骤如下:
1、创建word对象,定义如下:
var
FWord: Variant;//word对象
FDoc: Variant;//文档对象
创建:
try
FWord := CreateOleObject('Word.Application');
FWord.Visible := True;
except
Screen.Cursor := crDefault;
ShowMessage('创建word对象失败!');
Exit;
end;
2、然后就是把你录制的宏粘贴在里面进行修改。
需要注意以下问题:
在宏里面没有指定父对象的对象其对象都是word对象而不是文本对象,
例如宏“Selection.TypeText Text := '11'”就改为
“FWord.Selection.TypeText(Text := '11');”。
office vba是一们完整的基于对象的语言,对象很多但容易掌握,
你可以查找你机器上的文件:VBAWRD9.CHM(我用的是word2000,其它的版本
名字稍有不同),此帮助文件可能是最好的资料了。
再要注意的就是office vba里面定义了很多常量,所以转为delphi的代码时
就会提示常量没有定义,所以你要注意引用word2000这个单元(其它的版本
也要引用相关的单元。)
另外,创建对象用到的createoleobject要引用comobj单元。
————录制宏然后再装换成delphi代码是很好的解决方案,如果还有什么问题
请联系我。
 
Uses Word2000, ComObj;

var Word_Handle,Doc_Handle:OleVariant;

try
Word_Handle:=GetActiveOleObject('Word.Application');
except
try
Word_Handle := CreateOleObject('Word.Application');
except
Exit;
end;
end;
Word_Handle.Visible := True;

Word_Handle.Documents.Open(filename);

Doc_Handle:=Word_Handle.Documents.Add(Template:=AppPath+'Database/Template.dot',NewTemplate:=False);
Word_Handle.ActiveDocument.SaveAs(FileName:='D:/aa/'+jdbh+'.doc',FileFormat:=wdFormatDocument,AddToRecentFiles:=False);


procedure ReplaceStr(SourceStr,DestStr:string;WordHandle:OleVariant);
begin
WordHandle.Selection.Find.ClearFormatting;
WordHandle.Selection.Find.Text :=SourceStr;
WordHandle.Selection.Find.Replacement.Text := DestStr;
WordHandle.Selection.Find.Execute(Replace:=wdReplaceAll);
end;
 
谢谢楼上两位,但是我要的是DELPHI控制WORD的比较系统的资料(因为OLE方式功能肯定
要超过使用DELPHI控件的),你们所提供的我都搜索到了;
我以前编的程序都是从服务器上下载模板,然后替换书签进行打印的,而且只用了
COMOBJ一个单元。但是我现在需要做的是动态生成一张表格:
1、首先输入标题,设置为黑体、加粗、居中;
2、根据数据记录生成表格,插入数据。
看来用OLE的人不多啊,后天要交差,实在没法也就用DELPHI控件了。
 
不要用OLE了,很难控制!
 
可以先设计好 word 模板
在模板上进行控制。
你会发现要简单些。
 
我受不了你了,
不是说得很清楚了吗?
如果你不知道怎么画表格,然后再加粗的话,
就先将你要画的表格录制成一个宏,把你所有的要要求的东东都录上,
然后再把宏粘贴到delphi的代码中,
改一下就行了。
————用ole控制word的人肯定是很多的,
只是这本来就是很简单的问题,
自己知道方法怎么去解决就行了。
所谓授之以鱼不如授之以渔,
别人已经告诉你怎么去学去用了,
如果你还搞不定,
那就是你自己的问题了
 
TO ildg:
首先谢谢你的帮助。
但是我想用另一种方法解决,因为用控件的方法实在很简单!
我在一些资料中看到用OLE控制WORD的方法是功能最全面的,所以想借完成任务的机会学习
一下。
看您的意思是从中国到美国只要能坐船就可以了,而不去想进一步尝试坐飞机?
再次感谢回答我的问题。
看了《DELPHI4编程技术内幕》也只是讲的很简单,难道真的没有这方面的资料?
 
我没说用控件去解决这个问题啊,
直接创建ole对象是最灵活的,
以前有人的文章也很明显的说明了这一点。
如果你说的不是用ole,
那我就没话说了。
又如果你认为ole就是你说的用控件,
那我也没法说了。
如果上面两点都不成立的话,
那就是用ole了。
用ole的资料哪里有?
到处都有,
但是最好最全的就是word本身的帮助,
我第一次回答你的时候也说了。
其它的我没话说了。
 
to : ildg
您有没有尝试过不引用WORD97 或 WORD2000单元,单用COMOBJ单元编程控制WORD?
 
呵呵,
这两天没来上班,今天才看到你的文章,sorry。
word2000之类的单元是定义了一些常量,
不引用这个单元当然是可以的,
但是如果你不引用的话在程序里面就没办法用vba里面的常量了,
那样的话修改代码就比较麻烦,
这时候你只需要这样:
1、打开word
2、打开visual basic编辑器
3、按下f2键
然后就可以在对象浏览器中搜索你要找的常量,
如:你如果要知道wdListNumberStyleLegalLZ在word中被定义为多少,
一查就知道是254,然后你就在程序里面将所有的wdListNumberStyleLegalLZ
都换成254就行了。
——如果常量比较多的话,需要很长的时间来换这个,
所以说包含word2000文件是最明智的选择,
并不是包含了word2000了以后就是用控件了,只是用了常量而已。
 
后退
顶部