Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблемы с экспортом Excel в PDF в Delphi: восстановление областей печати

Delphi , Интернет и Сети , Браузер

Вопрос, поднятый в данной теме, касается проблемы экспорта файлов Excel в формат PDF с использованием компонентов Delphi. Проблема заключается в том, что при использовании метода ExportAsFixedFormat из Excel, параметр IgnorePrintAreas не работает как ожидается, и области печати не игнорируются при экспорте.

Оригинальный код экспорта Excel в PDF:

function TExportTool.ExportExcelToPDF(aFileName, aNewFileName: String): Boolean;
begin
  // ... код для экспорта активного листа в PDF ...
  oSheet.ExportAsFixedFormat(0, aNewFileName, EmptyParam, EmptyParam, False, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;

Пользователь столкнулся с проблемой, что созданный PDF-файл игнорирует области печати, даже если параметр IgnorePrintAreas был установлен в False. Были попытки передать параметр IgnorePrintAreas как True и False, а также передать все первые пять параметров метода, но проблема не была решена.

Подтвержденное решение:

Проблема заключается в том, что Excel теряет настройки областей печати при открытии файла с использованием автоматизации, особенно в неанглийских версиях программы. Это происходит из-за того, что Excel создает внутренний именованный диапазон для области печати, и при открытии файла через автоматизацию, свойство NameLocal не переводится, что приводит к тому, что именованный диапазон не распознается как область печати. В результате oSheet.PageSetup.PrintArea возвращает пустую строку.

Временное решение:

Перед вызовом ExportAsFixedFormat необходимо восстановить оригинальную область печати. Это можно сделать, установив свойство PrintArea на значение, соответствующее области печати, или используя следующий код:

procedure RestoreOriginalPrintArea(oSheet: OleVariant);
var
  i: Integer;
begin
  for i := 1 to oSheet.Names.Count do
  begin
    if VarToStr(oSheet.Names.Item(i).Name).EndsWith('!Print_Area') then
    begin
      oSheet.PageSetup.PrintArea := 'Print_area';
      Break;
    end;
  end;
end;

Этот код следует вызывать перед экспортом, например:

RestoreOriginalPrintArea(oSheet);
oSheet.ExportAsFixedFormat(0, aNewFileName, ...);

Также, поскольку файл может быть изменен, необходимо добавить:

oWB.Close(False); // Не сохранять изменения

перед закрытием приложения, чтобы избежать оставления процессов Excel после каждого вызова функции экспорта.

Пример обновленного кода экспорта:

function TExportTool.ExportExcelToPDF(aFileName, aNewFileName: String): Boolean;
begin
  // ... инициализация приложения Excel ...
  Try
    oWb := App.WorkBooks.Open(ExpandUNCFileName(aFileName), 1); // Открыть в режиме чтения
    Try
      oSheet := oWB.ActiveSheet;
      RestoreOriginalPrintArea(oSheet); // Восстановление области печати
      oSheet.ExportAsFixedFormat(0, aNewFileName, ..., False, ...);
      Result := True;
    Finally
      oWB.Close(False); // Закрыть книгу без сохранения
    End;
  Finally
    App.Quit;
    App := UnAssigned;
  End;
end;

Это решение позволяет восстановить корректную работу с областями печати при экспорте Excel в PDF в приложениях, написанных на Delphi.

Создано по материалам из источника по ссылке.

Вопрос связан с проблемой экспорта файлов Excel в формат PDF в среде Delphi, где области печати не игнорируются в соответствии с настройками, и требуется восстановление этих настроек для корректного экспорта.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Браузер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-11 10:39:34/0.0035150051116943/0