我有一个应用程序在保存为.doc文件时工作正常。 我已经尝试了它,所以程序将保存为.doc和.pdf,这是使用WordXP单元完成的。
procedure TDocCreator.CloseDocument(ASaveAs : string);
var
LFileName : OleVariant;
begin
LFileName := ASaveAs;
FDoc.SaveAs(LFileName, EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
LFileName := ChangeFileExt(ASaveAs, '.pdf');
FDoc.SaveAs(LFileName,PDFFileFormat,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
FWordApp.NormalTemplate.Saved := true;
FWordApp.Quit(True);
FWordApp.Disconnect;
end;
如果我删除第二个saveas代码工作正常。每次保存文档时都不会弹出“EOleException Command Failed”异常,但发生中断的时间点是SaveAs用于.pdf文件的时间。
注意我只有2个保存程序可用SaveAs(上面使用)和SaveAs2000。我也远离一台可以编译delphi的机器。
如果我遗漏了任何内容或需要清除任何内容,我将能够回复,但是我将无法在周二之前测试任何代码更改。
谢谢。
编辑: 好的,该程序正在远程调试(所有代码都无法访问办公室的机器,因为它在VM上)。一旦完成保存过程,应用程序将通过一组模板进行mailmerged。所以我做了2个文件(这个过程在for循环中完成)。这很好。然后我尝试在第三个文件上执行5,它提出了“命令失败”错误。然后不会关闭单词并取消剩余的进程。在查看LFileName时,其内容为'???'。这有时是外国人。虽然它仍然设法使用正确的filenam创建.doc文件。如果这与“ASaveAs”有任何区别,则在程序之外设置此文件名。另一件事是该文件没有使用任何其他应用程序打开。它使用程序打开的单词application完成整个过程。
答案 0 :(得分:0)
LFileName := ASaveAs;
try
try
FDoc.SaveAs(LFileName,EmptyParam, EmptyParam, EmptyParam, ...);
except
on E : Exception do
ShowMessage(E.ClassName + ' error creating document');
end;
try
if FileExists(LFileName) then
begin
Sleep(5000);
LFileName := ChangeFileExt(ASaveAs, '.pdf');
FDoc.SaveAs(LFileName,PDFFileFormat,EmptyParam, EmptyParam, ...;
end;
except
on E : Exception do
ShowMessage(E.ClassName + ' error creating PDF');
end;
finally
FWordApp.Quit(True);
FWordApp.Disconnect;
end;
可能会更好,我仍然不确定尝试和除了但它的工作没有崩溃,由于战术睡眠。可能会更好,并希望它,但现在这似乎是一个很好的解决方案。感谢David Heffernan指出该文件可能正在使用中。