求OLE语句:DELPHI中操纵WORD97(50分)

  • 主题发起人 主题发起人 lee3star
  • 开始时间 开始时间
L

lee3star

Unregistered / Unconfirmed
GUEST, unregistred user!
我在DELPHI中想操纵WORD97,具体就是要定位到一个输入位置,然后插入
值。由于不知道VBA在DELPHI中如何实现,我只写了下面几行,后面不知道
怎么写了,我在WORD中的定位是用BOOKMARK来实现的。
var
word:variant;
begin
word:=createoleobjec('word.application');
word.visible:=true;
word.Documents.Open(filename:='"C:/My Documents/固定资产卡片.doc"');
然后就不会了,要定位,插入值。
end;
我在VBA中已有语句,可是放到DELPHI中似乎不行,请大仙们指教!
我要语句!!!!!!!!
 
下面是我以前做的通过excel输出表格数据的源代码,里面包含了对象的创建、对象属性和方法的访问的例子。

创建Word对象和使用Word对象的属性、方法的格式是一样的,你只要在Word97附带的VBA帮助文件中找到属性或方法的描述,再按下面的格式使用就可以了。

顺便说一声,你上面提到的在文档中定位光标和插入内容的功能是很容易实现的,我们以前也“玩儿”过,还可以很容易就创建一个Word表格呢。。呵呵

var
vExcel : Variant;

……

try
ocExcel.CreateObject('Excel.Sheet',False);
vExcel := ocExcel.OleObject.Application;
except
ShowInfoBox('您的计算机尚未安装Microsoft Excel或其版本太低!','提示',
MB_OK+MB_ICONEXCLAMATION);
Exit;
end;

……

for intI:=0 to RowCount-1 do
for intJ:=1 to ColCount-1 do
vExcel.ActiveSheet.Cells[intI+1,intJ] := Cells[intJ,intI];

vExcel.ActiveSheet.SaveAs(strFileName);

boolSave := True;
try
vExcel.ActiveSheet.SaveAs(strFileName);
except
boolSave := False;
end;

if boolSave then ShowInfoBox('报表数据已经保存在文件<'+strFileName+'>中!','信息',MB_OK+MB_ICONINFORMATION);
 
漏了一个对象定义:
ocExcel: TOleContainer; //我当时是在表单上静态创建的,也可以动态Create
 
我的语句如下:
var
word:variant;
begin
word:=createoleobject('word.application');
word.visible:=true;
word.Documents.Open(filename:='"C:/My Documents/固定资产卡.doc"');
word.Selection.GoTo(What:=wdGoToBookmark,Name:='"gdzcmc"');
//后面没有写完
end
我使用的是WORD中的书签来定位,但是DELPHI老是告诉我错误:wdGoToBookmark变量没有定义。于是我在wdGoToBookmark上加了单引号,DELPHI编译是没有问题了,运行时WORD时打开了,文件也打开了,但是运行到第四句的时候,又告诉我:参数无效。请继续帮助我,谢谢!
 
wdGoToBookmark 是一个值,你在vba里查一下,看它等于几,
然后再替换一下不就行了?
或者可以用 const wdGoToBookmark = n;(n就是等于那个数啦)
 
各位老大:
我终于找到wdGoToBookmark是等于0了,但是当我运行改好的程序时,又错了,还是这句:word.Selection.GoTo(What:=0,Name:='"gdzcmc"');
错误是:书签不存在。可是我的书签是名副其实地存在的呀!
希望各位老大用一点点时间帮我解决这个问题,好吗,就要这一段的代码,可运行、无错的、WORD而不是EXECEL、此功能而不是别的功能的代码。在此先谢过了!
 
如果各位嫌分不够,等过几日小弟有了分,一并献上!
 
呵呵。。原来是这个问题呀!早说我那天不就告诉你(答案)了么?;) “晚”了一步。。嘻嘻
 
老大们,别耍我了,我现在是等米下锅啊!有程序赶快发给我呀!
 
我可以晚上回家帮你试试,不过在VB里面可以这样使用:
objWord.Selection.Goto wdGoToBookmark, Name:="Title"

你的程序的环境是? d4? d5?
 
如果你使用delphi5,
可以把/delphi5/ocx/servers/word97.pas拷贝到你的工程文件目录下
在你的程序中加上,uses ...,word97;就可以了。
或者在程序中加上
const
wdGoToBookmark = $FFFFFFFF;
也可以了。
 
我用的是DELPHI5,4也可以。
现在书签告诉我不存在,然后我定义的宏不能运行,请帮助我!
急!急!急!急!急!急!急!急!急!急!急!
 
下面的代码是否对你有启发:

var
V : Variant ;
begin
V := 0;
V := CreateOLEObject('Word.Application');
V.WordBasic.AppShow;

V.WordBasic.Fileopen('Your Word Doc name');
V.WordBasic.EditBookmark('Title',0,0,0,1);
V.WordBasic.Insert('cAkk's test');
V.WordBasic.EditBookmark('Name',0,0,0,1);
V.WordBasic.Insert('cAkk ');


另一段代码:
procedure TForm1.Button1Click(Sender: TObject);
var Test, Test1: Integer;
AString: Variant;
begin
MSWord := CreateOLEObject('Word.Application'); //Word 8
MSWord.Documents.Open (FileName:='d:/test.doc', ReadOnly:=True);
MSWord.Visible := 1;
Test := MSWord.FontNames.Count;
For Test1 := 1 To Test do
begin
AString := MSWord.FontNames.Item(Test1) ;
Memo1.Lines.Add(AString);
end;
MSWord.ActiveDocument.Range(Start:=0, End:=0);
MSWord.ActiveDocument.Range.InsertAfter(Text:='Title');
MSWord.ActiveDocument.Range.InsertParagraphAfter;
MSWord.ActiveDocument.Range.Font.Name := 'Arial';
MSWord.ActiveDocument.Range.Font.Size := 24;
AString := MSWord.ActiveDocument.Range.Font.Name;
Edit1.Text := AString;
end;
 
问CAKK最后一个问题,你马上可以拿到分数了。
我的问题非常简单:你是怎么知道这样做的,是看过什么资料吗,谢谢你推荐一下。我希望下次可以自己解决其它的WORD问题。
最后,衷心谢谢你的回答!
 
多人接受答案了。
 
网上查资料的.
 
lee3star,我也遇到同样的问题,Name:='书签名',但是GoTO没有任何反应。请问你解决了
吗?
 
后退
顶部