怎样向WORD文档追加数据!(100分)

  • 主题发起人 主题发起人 flyingboat
  • 开始时间 开始时间
F

flyingboat

Unregistered / Unconfirmed
GUEST, unregistred user!
想将剪贴板中的文本或图片自动追加到已存在的WORD文档中,
下面的程序执行没有问题,但每次插入都会覆盖以前的内容,
但实在没找到向WORD文档中追加数据的方法,各大虾帮帮忙!
在VBA的帮助里找了半天也没有找到移动光标的方法:(

procedure TForm1.BitBtn3Click(Sender: TObject);
var
MSWord: Variant;
SaveChanges, OriginalFormat, RouteDocument: OleVariant;
begin
try
MSWord := CreateOLEObject('Word.Application');//连接Word
MSWord.Documents.Open(FileName:='c:/doc1.doc', ReadOnly:=False);//打开外部Word文档
MSWord.Visible := False;//是否显示文件编辑

//将RichEdit1中的值插入到文档中
RichEdit1.SelectAll;
RichEdit1.CopyToClipboard;
MSWord.ActiveDocument.Sentences.Last.Paste;

SaveChanges := WdSaveChanges;
OriginalFormat := UnAssigned;
RouteDocument := UnAssigned;

WordApplication.Quit(SaveChanges, OriginalFormat, RouteDocument);
WordApplication.Disconnect;
except
on E: Exception do
begin
Showmessage(E.Message);
WordApplication.Disconnect;
end;
end;
end;
 
移动光标在WordApplication.Selection下,有一堆Move*的方法.
看看下面这段代码,是将光标移到文档最后的:
procedure GotoDocEnd(WrdApp: TWordApplication);
var
WdUnit, WdCount, wdExtend: OleVariant;
begin
WdUnit := wdScreen;
wdCount := 10;
wdExtend := EmptyParam;
while true do
if WrdApp.Selection.MoveDown(WdUnit, wdCount, wdExtend) = 0 then break;
end;
 
在Word中录制宏就可以得到移动光标的VBA代码。
 
MSWord.ActiveDocument.Sentences.Last返回一个range对象,他包含了sentences集合
里的最后一个句子,paste之后会覆盖原来的句子
你应该这样:
var
oleRange:olevariant;
oleRange:=msword.activedocument.sentences.last.collapse(wdCollapseEnd)//将范围折叠到末尾
oleRange.paste//样粘贴的内容的位置就在句子的后面了
另外:selection的效率很低,建议定位和拷贝粘贴等操作通过range来完成
建议你先花点时间搞清楚selection/range的常用操作和有什么不同再编程,这样效率高多了
 
不好意思,前段时间出差去了,也没机会上网!
位的回答都不是太详细,其实我的出发点很新简单,
代码我在前面已经贴出来了,就是要完成能把剪贴板的内容追加到一个文档后!
谁把实现这个功能的代码贴出来这分就给谁了!
 
真是把我给气坏了。我和djflying都已经告诉你怎么做了,怎么自己就不动手试一下呢。
你是用CreateOleObject方法,我是用Delphi的Server页上的TWordApplication,TWordDocument
控件,原理是一样的。

//打开文档,WordApp : TWordApplication, WordDoc : TWordDocument
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDoc(WordApp,WordDoc,'e:/doc2.doc');
end;
//粘贴
procedure TForm1.Button2Click(Sender: TObject);
begin
GotoDocEnd(WordApp);
WordApp.Selection.Paste;
end;

其中OpenDoc和GotoEnd函数如下:
==============================================================================
procedure OpenDoc(WrdApp: TWordApplication; var WrdDoc: TWordDocument; FileName: string);
var
FName, ConfirmConvert, ReadOnly, AddToRecentFile, PwdDoc, PwdTemp: OleVariant;
Revert, WritePwdDoc, WritePwdTemp, Format, Encoding, Visible: OleVariant;
begin
WrdApp.Connect;
WrdApp.Visible := True;

FName := FileName;
ConfirmConvert := EmptyParam;
ReadOnly := EmptyParam;
AddToRecentFile := EmptyParam;
PwdDoc := EmptyParam;
PwdTemp := EmptyParam;
Revert := EmptyParam;
WritePwdDoc := EmptyParam;
WritePwdTemp := EmptyParam;
Format := EmptyParam;
Encoding := EmptyParam;
Visible := EmptyParam;

WrdDoc.ConnectTo(WrdApp.Documents.Open(FName, ConfirmConvert, ReadOnly, AddToRecentFile, PwdDoc, PwdTemp,
Revert, WritePwdDoc, WritePwdTemp, Format, Encoding, Visible));
end;
========================================================================
procedure GotoDocEnd(WrdApp: TWordApplication);
var
WdUnit, WdCount, wdExtend: OleVariant;
begin
WdUnit := wdScreen;
wdCount := 10;
wdExtend := EmptyParam;
while true do
if WrdApp.Selection.MoveDown(WdUnit, wdCount, wdExtend) = 0 then break;
end;
 
procedure Tform4.addimg;
var
tstart,cstyle,tmps:olevariant;
wdc:olevariant;
tmpbmp:tbitmap;
begin
try
tmpbmp:=tbitmap.Create;
tmpbmp.Assign(tblobfield(adq_db.FieldByName('content')));
clipboard.Assign(tmpbmp)
finally
tmpbmp.Free;
end;
wdc:=$00000000;
tstart:=wordapp.ActiveDocument.Characters.Count;
wordapp.activedocument.sentences.last.collapse(wdc);
wordapp.ActiveDocument.sentences.last.paste;
wordapp.ActiveDocument.sentences.Last.InsertParagraphAfter;
wordapp.ActiveDocument.sentences.Last.Set_Style(cstyle);
end;

procedure tform4.addtext(tstr:string);
var
wdc,tstart:olevariant;
begin
wdc:=$00000000;
tstart:=wordapp.ActiveDocument.Characters.Count;
wordapp.ActiveDocument.Range(EmptyParam,EmptyParam).InsertAfter(tstr);
wordapp.ActiveDocument.Range(EmptyParam,EmptyParam).InsertParagraphAfter;
wordapp.ActiveDocument.Range(tstart,tstart).Set_Style(wdc);
end;
 
多谢各位的帮助!
 
后退
顶部