Как полистно сохранить или экспортировать книгу Excel в виде файла PDF?

Проблема с кодом, который у меня есть, заключается в том, что он либо сохраняет все страницы на всех листах в книге, либо сохраняет только страницы в диапазоне, указанном аргументами «от» и «до».

Файлы Excel, с которыми я работаю, имеют 7 рабочих листов, и каждый рабочий лист может иметь любое количество страниц. Если я укажу, что хочу экспортировать, например, «от 1 до 4», то в качестве документа PDF будут экспортированы только первые 4 страницы первого рабочего листа, а не все страницы первых 4 рабочих листов.

Может ли кто-нибудь сказать мне, как добиться того, что я пытаюсь сделать? Код ниже не то, что я хочу:

application.ActiveWorkbook.ExportAsFixedFormat(
      Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF,
      path,
      Excel.XlFixedFormatQuality.xlQualityStandard,
      true,
      true,
      1,
      4,
      false,
      Missing.Value);

person John Smith    schedule 06.08.2012    source источник


Ответы (3)


Если вы используете ActiveSheet.ExportAsFixedFormat после выбора нескольких листов, я думаю, он будет делать то, что вы хотите (если ваши области печати настроены на каждом из выбранных листов).

Необработанный макрос, записанный в этих строках:

    Sheets(Array("Sheet1", "Sheet2")).Select

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\Documents and Settings\yourusername\Desktop\Book1.pdf", _  
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= False
person Tim Williams    schedule 06.08.2012
comment
Чувак, ты спасатель, я застрял на часах - person ; 13.11.2015

Вот ответ: ActiveSheet.PageSetup.Pages.Count

person John Smith    schedule 08.08.2012

Public Sub Export(ParamArray ToPrint() As Variant)

'hide all sheets
For Each Sheet In ActiveWorkbook.Sheets

    Sheet.Hide

Next Sheet

'unhide sheets to print
For Each pageNo In ToPrint

ActiveWorkbook.Sheets(pageNo).Show

Next pageNo

'do the export
    Worksheet.ExportAsFixedFormat _
        Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, _
        Path, _
        Excel.XlFixedFormatQuality.xlQualityStandard, _
        True, _
        True, _
        Nothing, _
        Nothing, _
        False, _
        Missing.Value

'unhide all sheets
For Each Sheet In ActiveWorkbook.Sheets

    Sheet.Show

Next Sheet

Конец сабвуфера

Вызовите его, передав список листов, разделенных запятыми, для экспорта

Export 1, 2, 4
person Stuart    schedule 06.08.2012
comment
Проблема с вашей стратегией заключается в том, что каждый раз, когда вызывается ExportAsFixedFormat(), он перезаписывает файл PDF. Другими словами, листы не добавляются к файлу PDF; вместо этого каждый раз при повторении цикла создается новый файл PDF, состоящий из одного рабочего листа. Я уверен, что можно найти способ объединить все полученные файлы PDF, но это немного неуклюже. Можно ли это сделать с помощью Excel API? (Я также думал удалить листы, которые мне не нужны, из файла Excel, вызвав метод Delete(), но это ничего не меняет.) - person John Smith; 07.08.2012
comment
Хорошо, кажется, я понимаю, что вы имеете в виду. вы хотите сказать экспорт 1 t0 4 и он экспортирует ЛИСТЫ с 1 по 4, независимо от того, сколько у них страниц? - person Stuart; 07.08.2012