WordXP Delphi 命令保存为 PDF 失败
WordXP Delphi Command Failed Saving as PDF
我有一个应用程序在保存为 .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.
的机器
如果我遗漏了任何内容或需要清理任何内容,我将能够回复,但是我要到星期二才能测试任何代码更改。
谢谢。
编辑:
好的,程序正在远程调试(执行所有代码的机器无法访问办公室,因为它在虚拟机上)。该应用程序通过一组模板进行邮件合并,一旦完成,保存过程就开始了。所以我做了 2 个文档(这个过程是在 for 循环中完成的)。这很好用。然后我尝试在第三个文件上执行 5 它引发了 'Command Failed' 错误。然后不关闭单词并取消剩余的过程。查看 LFileName 时,其内容为“???”。这有时是外国字符。尽管它仍然设法使用正确的文件名制作 .doc 文件。这个文件名是在过程之外设置的,如果有任何区别的话 'ASaveAs'。另一件事是该文件未使用任何其他应用程序打开。它使用程序打开的单词应用程序完成整个过程。
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;
可能会更好,我仍然不确定 try 和 except,但由于战术睡眠,它可以正常工作而不会崩溃。可能会更好并且会喜欢它但现在这似乎是一个不错的解决方案。感谢 David Heffernan 指出该文件可能正在使用中。
我有一个应用程序在保存为 .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.
的机器如果我遗漏了任何内容或需要清理任何内容,我将能够回复,但是我要到星期二才能测试任何代码更改。
谢谢。
编辑: 好的,程序正在远程调试(执行所有代码的机器无法访问办公室,因为它在虚拟机上)。该应用程序通过一组模板进行邮件合并,一旦完成,保存过程就开始了。所以我做了 2 个文档(这个过程是在 for 循环中完成的)。这很好用。然后我尝试在第三个文件上执行 5 它引发了 'Command Failed' 错误。然后不关闭单词并取消剩余的过程。查看 LFileName 时,其内容为“???”。这有时是外国字符。尽管它仍然设法使用正确的文件名制作 .doc 文件。这个文件名是在过程之外设置的,如果有任何区别的话 'ASaveAs'。另一件事是该文件未使用任何其他应用程序打开。它使用程序打开的单词应用程序完成整个过程。
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;
可能会更好,我仍然不确定 try 和 except,但由于战术睡眠,它可以正常工作而不会崩溃。可能会更好并且会喜欢它但现在这似乎是一个不错的解决方案。感谢 David Heffernan 指出该文件可能正在使用中。