web-dev-qa-db-ja.com

PDFプリンターなし*でMicrosoftOfficeを使用して、一般的なページ範囲をPDFにエクスポートするにはどうすればよいですか?

現在、ExcelドキュメントをPDFに保存しようとしていますが、同じプロセスをWordドキュメントに適用できます。特定の範囲のページ(1、3〜5、8ページなど)をPDFファイルに保存したいと思います。

ファイルをPDFとして保存しようとすると、ファイルタイプとしてPDF]を選択し、[オプション...]ボタンをクリックすると、[ページ範囲]の下に2つのオプションしか表示されません。 。AllまたはPage(s)のいずれかを選択できます。これにより、単一の範囲(たとえば、1〜10)のみを選択できます。

ドキュメントを印刷するときと同様に、一般的なページ範囲を保存して、PDFに含めるページのコンマ区切りリスト(1, 3-5, 8など)を入力できる方法はありますか?

私はVBAの使用を恥ずかしがりませんが、インストールできないため、a PDF printer)の使用は避けたいと思います。仕事用コンピューターのドライバー(管理者権限なし)。また、ページ番号の一貫性を維持したいと思います(1、4、5、および8ページを印刷すると、下部に「ページ1/3」、「ページ2 of 3 "など)これが可能であることはわかっています。これは、複数の選択されたセルを使用してドキュメントをPDFとしてエクスポートするときに発生するためです。

ありがとうございました。

5
Breakthrough

いくつかのVBAコードと ExportAsFixedFormatメソッド を使用して、問題の解決策をようやく見つけました。基本的に、その関数は現在のrangeをタイプとファイル名でエクスポートします。以下の答えは、私の場合に固有ですが、誰の状況にも簡単に適応できます。

いくつかの検討とコーディングの後で、適切な範囲を見つけるための解決策を思いつきました-それは完璧にはほど遠いですが。次のVBA関数(Excelでのみ使用)を作成しました。これは、2つの水平改ページの間の範囲を返します(開始列と終了列を指定する必要があります)。

' 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

いくつかの注意点があります。主に、これを機能させるには、水平方向の改ページを定義する必要があります。私の場合、この機能は機能しましたが、各ページにグラフがありました。 1ページの範囲を使おうとすると、何らかの理由で後続のページのグラフがすべて途切れる可能性があるため、次の関数を記述して、各ページを文字列内の異なる範囲として追加しました。

最後に、作成された範囲は、次の関数を介して回答の上部に詳述されているように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ページの範囲を一度に1つずつ追加する必要があることに注意してください。そうしないと、(前述のように)グラフが途切れてしまいます。なぜこれをしなければならなかったのか分かりませんが、結局はうまくいきました。うまくいけば、私がここに投稿したものは、VBAコードを使用してドキュメントをPDFファイルとしてエクスポートするために誰かを正しい軌道に乗せるのに十分です。

将来、誰かがより良い解決策を思い付くことができたら、それを答えとして投稿してください。それが検討されます。

1
Breakthrough

ExcelドキュメントはOpenOffice内でどのように見えますか?

OpenOfficeはPDFに直接エクスポートでき、 Portable バージョンのOpenOfficeを入手できるため、システムにインストールする必要はありません。

2
Matrix Mole

this を試してください。プリンターとしてインストールされるのはPDFクリエーターアプリです。ページ範囲を指定して、この「プリンター」に印刷するだけです。

2
CaptainProg

Word内から直接これを実行することをお勧めしますが、そのように実行するための実際のソリューションが不足しているため、Javaである限り、PDFsam(PDF Split and Merge)を提案したいと思います。はマシン上で利用可能であり、使用するためにインストールする必要はありません。

PDFsamを使用すると、ドキュメントを効果的に分割、並べ替え、マージ、および一般的にシャッフルできます。

http://www.pdfsam.org/ から入手してください

Pdfsamとは何ですか?

PDF Split and Mergeは、PDFファイルを分割およびマージするための非常にシンプルで使いやすい無料のオープンソースユーティリティです。基本バージョンと拡張バージョンの2つのバージョンでリリースされています。コンソールとGUIインターフェイスが含まれています。

2
Mokubai