Я, наконец, нашел решение своей проблемы, используя некоторый код VBA и ExportAsFixedFormat
метод. В принципе, эта функция будет экспортировать текущий ряд С типом и именем. Ответ ниже, хотя и специфичен для моего случая, легко адаптируется к любой ситуации.
после некоторого обсуждения и кодирования я придумал решение, чтобы найти правильные диапазоны-хотя это далеко не идеально. Я написал следующую функцию VBA (для использования с Excel only), который возвращает диапазон между двумя горизонтальными разрывами страниц (необходимо указать начальный и конечный столбцы):
' Name: Get Range
' Desc: Returns a string representing a range (e.g. "A1:Z30"), which encompasses the specified page breaks.
' Args: startHPBreak - Used to determine which starting page break to use, from 0 up to the number of pagebreaks.
' endHPBreak - Used to determine the last page break to return up to.
Function GetRange(ByVal startHPBreak As Long, ByVal endHPBreak As Long) As String
Dim startCol, endCol As String ' First, we define our starting/ending columns.
startCol = "A"
endCol = "Z"
Dim numHPBreaks As Long ' Holds the total number of horizontal page breaks.
Dim startRow, endRow As Long ' Holds the starting/ending rows of the range.
' First, we get the total number of page breaks.
numHPBreaks = ActiveSheet.HPageBreaks.Count
' Then, we check to see the passed ranges are valid (returns a blank string if they are not).
If (startHPBreak < 0) Or (startHPBreak > numHPBreaks) Then Exit Function
If (endHPBreak <= startHPBreak) Or (endHPBreak > numHPBreaks) Then Exit Function
' Next, we build our string by obtaining our starting and ending rows.
If startHPBreak = 0 Then ' If we're starting at the 0th page break...
startRow = 1 ' Then start exporting at the first row.
Else ' Else, just get the starting page break row.
startRow = ActiveSheet.HPageBreaks(startHPBreak).Location.Row
End If
' Lastly, we get the ending page break row, build the range as a string, and return it.
endRow = ActiveSheet.HPageBreaks(endHPBreak).Location.Row - 1
GetRange = startCol & startRow & ":" & endCol & endRow
End Function
есть некоторые предостережения, в основном, что вам нужно иметь горизонтальные разрывы страниц, определенные для этой работы. В моем случае эта функция работала, но на каждой странице были графики. Всякий раз, когда я пытался использовать диапазон на одной странице, графики на последующих страницах по какой-то причине были бы отрезаны, поэтому я написал следующую функцию для добавления каждого страница в виде другого диапазона в строке a:
наконец, созданный диапазон был передан ExportAsFixedFormat
функция, подробно описанная в верхней части моего ответа через следующую функцию (я хотел экспортировать только страницы 1-2 и 12-17):
' Name: Export Pages
' Desc: Exports the specified pages/range in the function to the passed filename as a PDF.
' Args: outFileName - Full or relative file name (include the extension) to export the file as.
Sub ExportPages(outFileName As String)
Dim outputRange As String ' Used to build the output range.
Dim currPage As Byte ' Holds the current page we want to export.
' There are no graphs on the first two pages, so we can get that range all at once.
outputRange = GetRange(0, 2)
' Next, we loop through and add pages 12 to 17 to the range (since they have graphs).
For currPage = 12 To 17
' We build the range one page at a time, and seperate the ranges with commas.
outputRange = outputRange & "," & GetRange(currPage - 1, currPage)
Next currPage
' Finally, we use the outputRange string to specify the range, and export it as a PDF.
ActiveSheet.Range(outputRange).ExportAsFixedFormat _
Type := xlTypePDF, _
Filename := outFileName, _
Quality := xlQualityStandard, _
IncludeDocProperties := True, _
IgnorePrintAreas := False, _
OpenAfterPublish := True
End Sub
обратите внимание, что я должен был добавить диапазон для страниц 12-17 по одному, иначе (как я уже упоминал) мои графики будут отрезаны. Я не знаю, почему я должен был это сделать, но в конце концов это сработало. Надеюсь, того, что я опубликовал здесь, достаточно, чтобы получить кто-то на правильном пути, используя код VBA для экспорта документа в формате PDF.
если кто-то может придумать лучшее решение в будущем, пожалуйста, разместите его в качестве ответа, и он будет рассмотрен.