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 指出该文件可能正在使用中。