开发程序转换从Excel文件到PDF格式。下面是我的代码:
procedure ExcelToPDF(const InputFileName, OutputFileName: string);
var
Excel: Variant;
Workbook: Variant;
begin
try
CoInitializeEx(nil, 0);
//Открытие Excel
Excel := CreateOleObject('Excel.Application');
// Excel.Application.EnableEvents := False;
Excel.Application.DisplayAlerts := False;
Excel.Visible := False;
if not VarIsNull(Excel) then
begin
//Открытие файла
Workbook := Excel.Workbooks.Open(InputFileName);
//Сохранение в PDF
Workbook.ExportAsFixedFormat(xlTypePDF, OutputFileName);
Writeln('OK');
end
else
begin
raise Exception.Create('Не удалось открыть Excel');
end;
finally
if not VarIsNull(Excel) then
begin
Excel.Quit;
Excel := 0;
end;
end;
end;
它工作正常,但对于一些工作簿有一个错误输入对话框,当程序试图打开工作簿(也看截图):
名称冲突
名称不能与内置名称相同。
旧名称:打印区域
新名称:
确定取消
旧名称可以是Print_Area或_FilterDatabase或其他名称。这是非常常见的错误,但我没有找到真实的的解决方案。但关键问题是:当我自己在Excel中打开有问题的工作簿时,它可以正常工作,没有任何对话框,只有当我通过OLE在程序中打开它时,它才出现。如果在OLE中我们只使用Excel,那会怎么样?所以Excel可能使用其他参数打开文件?我正在试验打开方法参数,但什么也没有。
2条答案
按热度按时间abithluo1#
谢谢你所有的意见。我找到了解决方案。在VBA中有GetObject函数。我在互联网上找到了 Delphi 实现它。它是:
所以,不用这两行:
仅使用一个:
92vpleto2#
它接缝有一个包在XL文件。在我的情况下,我导出数据到scv,然后保存到xlsb。这帮助我避免了错误。