6

В настоящее время я пытаюсь сохранить документ Excel в PDF, но тот же процесс может быть применен к документу Word. Я хотел бы сохранить определенный диапазон страниц (например, страницы 1, 3-5 и 8) в файл PDF.

Когда я пытаюсь сохранить файл в формате PDF, когда я выбираю PDF в качестве типа файла и нажимаю кнопку «Параметры ...», мне предоставляется только два параметра в разделе "Диапазон страниц". Я могу выбрать « All или « Page(s) , что позволяет мне выбирать только один диапазон (например, 1–10 и все).

Есть ли способ сохранить общий диапазон страниц, как при печати документа, чтобы я мог ввести разделенный запятыми список страниц (например, 1, 3-5, 8) для включения в PDF?

Хотя я не стесняюсь использовать VBA, я бы хотел не использовать принтер PDF, так как не могу установить драйверы на свой рабочий компьютер (без административных привилегий). Я также хочу постараться, чтобы номера страниц были единообразными (если я печатаю страницы 1, 4, 5 и 8, там написано внизу "Страница 1 из 3", "Страница 2 из 3" и т.д.). Я знаю, что это возможно, поскольку это происходит, когда я экспортирую документ в формате PDF с несколькими выделенными ячейками.

Спасибо.

4 ответа4

2

Как выглядит документ Excel внутри OpenOffice?

OpenOffice может экспортировать напрямую в PDF, и вы можете получить Переносную версию OpenOffice, чтобы ее не нужно было устанавливать в системе.

2

Попробуй это. Это приложение для создания PDF, которое устанавливается как принтер. Вы просто указываете диапазон страниц и печатаете на этот «принтер».

2

Я знаю, что вы бы предпочли сделать это напрямую из Word, но в отсутствие реального решения для этого, я бы хотел предложить PDFsam (PDF Split and Merge), который, пока Java доступен на компьютере, не нужен быть установленным, чтобы быть использованным.

Вы можете легко разделить, переупорядочить, объединить и вообще перемешать документы, используя PDFsam

Получить его с http://www.pdfsam.org/

Что такое pdfsam?

PDF Split and Merge - это очень простая, простая в использовании, бесплатная утилита с открытым исходным кодом для разделения и объединения PDF-файлов. Он выпущен в двух версиях: базовой и расширенной. Включает в себя консоль и графический интерфейс.

1

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

После некоторых размышлений и написания кода, я нашел решение, чтобы найти подходящие диапазоны - хотя оно далеко от совершенства. Я написал следующую функцию VBA (для использования только с Excel), которая возвращает диапазон между двумя горизонтальными разрывами страниц (вам нужно указать начальный и конечный столбцы):

' 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

Есть некоторые предостережения, в основном, для этого вам нужно определить горизонтальные разрывы страниц. В моем случае эта функция работала, но на каждой странице были графики. Всякий раз, когда я пытался использовать диапазон на одной странице, графики на последующих страницах по какой-то причине все обрезались, поэтому я написал следующую функцию, чтобы добавить каждую страницу как отдельный диапазон в строке:

Наконец, созданный диапазон был передан в функцию 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.

Если кто-то может найти лучшее решение в будущем, пожалуйста, опубликуйте его как ответ, и оно будет рассмотрено.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .