将Excel工作簿另存为PDF会导致OLE错误800A03EC

将Excel工作簿另存为PDF会导致OLE错误800A03EC,excel,delphi,automation,ole,Excel,Delphi,Automation,Ole,我想使用以下函数从Excel创建PDF。 但是当试图保存PDF时,我得到了一个OLE错误800A03EC,我根本无法理解。 我用同样的方法从Word创建PDF,效果很好 function xlsCreatePdf(aInput: string; aOutput: string = ''): string; var FileDoc: OleVariant; FilePDF: OleVariant; ExcelBook: ExcelWorkbook; PdfName: string;

我想使用以下函数从Excel创建PDF。 但是当试图保存PDF时,我得到了一个OLE错误800A03EC,我根本无法理解。 我用同样的方法从Word创建PDF,效果很好

function xlsCreatePdf(aInput: string; aOutput: string = ''): string;
var
  FileDoc: OleVariant;
  FilePDF: OleVariant;
  ExcelBook: ExcelWorkbook;
  PdfName: string;
  ExcelApp: ExcelApplication;
begin
  Result := '';
  if aOutput = '' then
    begin
      PdfName := Folders.DirOutput + ExtractFileName(aInput);
      PdfName := ChangeFileExt(PdfName, '.pdf');
    end
  else
    PdfName := aOutput;

  if (Files.Validate(aInput)) then
    begin
      if not Assigned(ExcelApp) then
        ExcelApp := xlsInitialize;
      FileDoc := aInput;
      ExcelBook := ExcelApp.Workbooks.Open(FileDoc,
                                           EmptyParam, EmptyParam, EmptyParam,
                                           EmptyParam, EmptyParam, EmptyParam,
                                           EmptyParam, EmptyParam, EmptyParam,
                                           EmptyParam, EmptyParam, EmptyParam,
                                           EmptyParam, EmptyParam, DefaultLCID);
      FilePdf := PdfName;
      ExcelBook.SaveAs(FilePdf, xlTypePDF,
                       EmptyParam, EmptyParam,
                       False, False,
                       xlNoChange, xlUserResolution, False,
                       EmptyParam, EmptyParam, EmptyParam, DefaultLCID);
      xlsFreeAndNil(ExcelApp);

      if (Files.Validate(PdfName)) then
        Result := PdfName
      else
        Result := '';
    end;
end;
我使用

function xlsInitialize: ExcelApplication;
var
  ExcelApp: ExcelApplication;
begin
  DefaultLCID := LOCALE_USER_DEFAULT;
  ExcelApp := CreateOleObject('Excel.Application') as ExcelApplication;
  if Assigned(ExcelApp) then
    begin
      Result := ExcelApp;
      ExcelApp.Visible[DefaultLCID] := True;
    end
  else
    raise Exception.Create('Cannot initialize Excel application');
end;
并且应该使用

procedure xlsFreeAndNil(var ExcelApp: ExcelApplication);
var
  i: integer;
begin
  if Assigned(ExcelApp) then
    begin
      for i := 0 to ExcelApp.WorkBooks.Count - 1 do
        ExcelApp.WorkBooks.Close(DefaultLCID);
      ExcelApp.Quit;
      Pointer(ExcelApp) := Nil;
    end;
end;

我使用的是Delphi XE7和Excel 2010-使用的Office TLB是2010

我不认为转换为PDF将是一种正常的存储方式。
您应该尝试导出它,

so。你到底从哪里得到一个异常?检查你的
xlsFreeAndNil
proc,它有一个for循环,但没有使用for循环变量。错误来自于“ExcelBook.SaveAs”,for循环是以前尝试的遗留,现在已经不存在了。谢谢-我很抱歉忽视了这一点。或者M$'不好,因为它在Word和Excel中的工作方式不同:-),但它的工作方式与您所说的一样,这是很重要的。