RichEdit的内容全部复制到一个word新文档中去,第二次执行出错的问题。 (50分)

  • 主题发起人 主题发起人 hsb0307
  • 开始时间 开始时间
H

hsb0307

Unregistered / Unconfirmed
GUEST, unregistred user!
RichEdit的内容全部复制到一个word新文档中去并保存为一个doc文件,
相当于将RichEdit的内容到处为一个word文档,第一次执行没问题,第二次执行就出错,
“服务器出现意外”或“RPC...”
请指正。

代码如下:
procedure TForm1.Button2Click(Sender: TObject);
var
Template, NewTemplate,DocType,DocVisible : OleVariant;
ItemIndex,Format,FileName: OleVariant;
SaveChanges: Olevariant;
begin
Editor.SelectAll;
Editor.CopyToClipboard;
Editor.SelStart := Editor.SelLength;

Template := EmptyParam;
NewTemplate := EmptyParam;
DocType := EmptyParam;
DocVisible := False;//EmptyParam;

WordApp.Connect; // WordApp : TWordApplication
WordApp.Visible := False;
WordApp.Documents.Add(Template,NewTemplate,DocType,DocVisible);
ItemIndex := 1;
WordDoc.ConnectTo(WordApp.Documents.Item(ItemIndex));
//WordApp.Selection.Paste;
//WordDoc.Content.Paste;
WordDoc.Range.Paste;//[blue]此句在第二次执行时出问题。[/blue]

//WordDoc.Sentences.Last.Paste;
Format := wdFormatDocument;//wdFormatRTF;
if OpenDialog1.Execute then
FileName:=OpenDialog1.FileName;
if FileName='' then Exit;
WordDoc.SaveAs(FileName,Format);
WordDoc.Close;//[red]此句有没有用?[/red]
WordDoc.Disconnect;//[blue]此句有没有用?[/blue]
SaveChanges := wdDoNotSaveChanges;//wdSaveChanges;
try
WordApp.Quit(SaveChanges);
WordApp.Disconnect;
except
on e: exception do
begin
ShowMessage(e.message);
WordApp.Disconnect;
end;
end;
end;

请大家帮我看看这段代码:
用下面的代码,也是第一次执行没问题,第二次执行就出错,
“服务器出现意外”或“RPC...”
难道WordApp.Free;没执行?

function EditExportDoc(FileName:Olevariant;Editor:TJvCustomRichEdit):Boolean;
var
WordApp: TWordApplication;
WordDoc: TWordDocument;
Template, NewTemplate,DocType,DocVisible : OleVariant;
ItemIndex,Format: OleVariant; // ,FileName
SaveChanges: Olevariant;
begin
Result:=False;
Editor.SelectAll;
Editor.CopyToClipboard;
Editor.SelStart := Editor.SelLength;

Template := EmptyParam;
NewTemplate := EmptyParam;
DocType := EmptyParam;
DocVisible := False;//EmptyParam;
WordApp:=TWordApplication.Create(nil);
try
WordApp.Connect;
except
ShowMessage('您的电脑没装Word!');
Abort;
end;
WordApp.Visible := False;
WordApp.Documents.Add(Template,NewTemplate,DocType,DocVisible);
WordDoc:=TWordDocument.Create(nil);
ItemIndex := 1;

WordDoc.ConnectTo(WordApp.Documents.Item(ItemIndex));//ActiveDocument
//WordDoc.ConnectTo(WordApp.ActiveDocument);//ActiveDocument
WordDoc.Range.Paste;

Format := wdFormatDocument;//wdFormatRTF;
WordDoc.SaveAs(FileName,Format);
WordDoc.Close;
WordDoc.Disconnect;
WordDoc.Free;
SaveChanges := wdDoNotSaveChanges;
try
WordApp.Quit(SaveChanges);
WordApp.Disconnect;
except
on e: exception do
begin
ShowMessage(e.message);
WordApp.Disconnect;
end;
end;
WordApp.Free;
Result:=True;
end;
 

应该是你第一次运行后退出了WORDAPP又没有再次创建对象。
WordApp.Quit(SaveChanges);去掉试试,如果一定要保存,
调用保存的方法,不要保存并退出,或者每次运行重新创建对象
 
去掉后,还是出错。
 
释放不彻底
 
这是因为你的word没有被释放掉,你可先判断进程中有没有word,如果有的话,直接调用打开word,如果没有的话再次打开,代码如下:
//创建一个word对象
try
Wordapp:=GetActiveOleObject('Word.Application');//先判断进程中有没有word
except
try
Wordapp:=CreateOleObject('Word.Application');//进程中没有再打开
except
MessageDlg('Word可能没有安装或者安装不正确,请检查原因。', mtError, [mbOk], 0);
exit;
end;
end;
wordApp.Visible:=true;
//创建一个word文档
 
多人接受答案了。
 
后退
顶部