Как сохранить excel в pdf макрос

Как сохранить рабочий лист из таблицы Excel в формате PDF

Я пытаюсь написать (что я думал) простой макрос, который сохранит листок (не всю Рабочую книгу) из таблицы Excel как PDF. Я использую Excel 2016 (15.24) на MacBook Pro, работающем на Yosemite. Я видел множество примеров здесь и в Интернете.

Я начал с записи макроса и отредактировал его. Это выглядело так:

Это создало файл PDF, но в нем содержались все листы из рабочей книги. По-видимому, по какой-то причине, PublishOption: = xlSheet, хотя он работает вручную при записи макроса, не работает из VBA.

ОК. Поэтому я попробовал другой подход с использованием ExportAsFixedFormat, моделируя мой подход на некоторых примерах, которые я видел здесь и в других местах в Интернете, и стараюсь, чтобы это было как можно проще. Вот моя версия.

Каждый раз, когда я пытаюсь это сделать, я получаю ошибку печати, за которой следует страшная ошибка во время выполнения 1004. Кстати, кто-нибудь знает определение этой ошибки?

Может ли кто-нибудь предположить, почему это не работает? Я был бы благодарен за любой совет.

В силу рекомендаций Синана ниже я изменил код на

Я получаю ту же ошибку времени выполнения 1004, но она дает мне дополнительную информацию "Сбой метода класса Worksheet"

Я попробовал метод Дэвида Земенса ниже, чтобы скопировать активный рабочий лист в новую Рабочую книгу, а затем использовать SaveAs в этой новой книге.

Тем не менее, это попытка распечатать рабочий лист на моем принтере по умолчанию, а не конвертировать в PDF.

Сохранение документов Excel в PDF на сервере

Не так давно появилась задача создать простой сервис по созданию PDF отчетов на основе офисных документов для интранета. И вроде бы все просто, но вот с сохранением Excel в PDF возникли проблемы. Интересно? Прошу под кат.

Как я и сказал, поначалу все казалось легко, у меня были собственные наработки, на хабре была статья. Но обо всем по порядку.

Мои наработки использовали сom объекты excel.application и метод saveAs, это прекрасно работало, пока требовалось взять обычный, красивый документ и сделать из него pdf, но в данном случае файлы были нет так просты.

Во-первых, документы предполагаются трех форматов — xls, xlsx и xml. Во вторых все документы содержат макросы, а некоторые ссылки на другие документы. В третьих они содержат кучу листов, и перекрестные ссылки между листами. Не нужные для отчета листы делаются скрытыми, а на самих листах в каше вспомогательных цифр отчетная информация выделялась областью печати. Нужно ли говорить, что saveAs игнорирует все это богатство и на выходе после танца с бубнами получаем абсолютно не читаемую картину.

Здесь я думаю необходимо сделать лирическое отступление и пояснить, почему с файлами творится такая неразбериха. Я работаю в очень крупной организации, бок обок с кучей бабушке пенсионного возраста. Они не могут даже сделать текст в ячейке жирным, но прекрасно могут говорить начальству о том, что они не «программисты» и не должны это уметь. Начальства у нас тоже много, и в силу жалости к бабушкам или своей компьютерной безграмотности, а быть может, по велению звезд жалобы бабушек поощряются, и все попытки разгрести бардак в документах пресекается.

Вернемся к нашим баранам. В выше упомянутой статье был предложен вариант конвертации «Как вижу» с использованием open office, этот вариант меня не устроил в силу ветреного отношения OO к MS. Некоторые документы действительно открывались в нем корректно, но чаще всего содержимое ехало еще до конвертации.

Был еще третий вариант. Печатать документы на виртуальный принтер, но я решил, что этот вариант я приберегу на самый крайний случай, так это костыль.

И тогда я обратился к гуглу и он дал мне эту замечательную ссылку. Описанный в ней метод ExportAsFixedFormat был тем, что нужно! Но меня опять постигла не удача.

Он начисто игнорировал области печати, а без них получалась каша. Я гуглил, оставлял вопросы на множестве форумах, в том числе и на англоязычных. Ответа не было. Я даже перенес код статьи в C#, но результат не изменился.

После недели изысканий, я решил плюнуть на все и использовать тот самый крайний вариант с виртуальным принтером, но каково же было мое изумление, когда и он проигнорировал область печати, притом, что если отправить документ из самого Excel все было нормально.

Путем проб и ошибок, танцев с бубнами и увлекательным чтением гугла я выяснил, области печати игнорируется при вызове этого метода и печати в php, C#, но почему то при использовании VBScript все работает как надо. Чем это вызвано я, к сожалению, так и не выяснил.

И так, было решено из PHP открывать VBS скрип и уже из него преобразовывать excel в pdf. Да, это тоже костыль, но не такой неуклюжий как виртуальный принтер.

Вот получившийся скрипт:

Dim XL
Dim XLWkbk
Dim ObjArgs
Dim paramSourceBookPath
Dim paramExportFilePath

set objargs = wscript.arguments
if objArgs.count exec(APPLICATION_SCRIPT_FOLDER.’\\excel.vbs C:\\tmp\\test.xlsx C:\\tmp\\test.pdf");

В сухом остатке мы имеем не совсем красивый, но 100% рабочий метод по преобразованию Excel в PDF, который гарантирует результат «Как на печати» без подводных камней.

Ссылка на основную публикацию