PDFを1ページずつ分割して、Excelのセル値でファイル名を付けるPythonツールを作りました

PDFをページごとに分割し、Excelのセル値でファイル名を付ける流れを表した図 Windows
記事内には広告が含まれています。

複数ページのPDFを1ページずつに分け、ページごとに別の名前を付けたいことはありませんか?

ファイル名が一覧になったExcelがあれば、手作業で名前を入力しなくても、PDFを分割して保存できます。今回は、Excelの指定したセルから下方向に値を読み取り、PDFの各ページに対応するファイル名として使うWindows向けPythonツールを紹介します。

3ページのPDF、ExcelのA1からA3のセル、出力される3つのファイル名の対応を示す図
PDFのページとExcelのセルを上から順に対応させます。

できること

たとえば、PDFが3ページあり、ExcelのA1から次の名前が入力されているとします。

PDFのページ Excelのセル 出力されるファイル名
1ページ目 A1: あいう あいう.pdf
2ページ目 A2: かきく かきく.pdf
3ページ目 A3: さしす さしす.pdf

ページ番号などの連番は付けず、セルの値をそのままファイル名にします。元のPDFとExcelファイルは変更しません。

必要な環境

  • Windows 11
  • Python 3.10以降
  • ファイル名を入力したExcelブック(.xlsx または .xlsm)

ツールの起動には、リポジトリにある 起動.bat を使います。起動時に必要なライブラリが入っているか確認し、不足している場合はインストールします。初回のインストールにはインターネット接続が必要です。

Excelファイルを準備する

Excelのシートに、PDFのページ数分のファイル名を入力します。開始セルをA1にする場合、1ページ目の名前をA1、2ページ目をA2、3ページ目をA3に入力します。

分割前のサンプルPDFと、A1からA3にファイル名を入力したサンプルExcel
サンプルExcelと3ページのダミーPDFを使って試せます。

空欄や重複した名前があると、分割を始める前にエラーになります。ファイル名に使えない文字やWindowsの予約名も指定できません。

サンプルファイルはGitHubリポジトリの samplesフォルダーからダウンロードできます。個人情報や実際の書類は含まれていません。

ツールの使い方

  1. 起動.bat をダブルクリックします。
  2. 「分割するPDF」で、分割したいPDFを選びます。
  3. 「Excelファイル」でExcelブックを選び、対象のシートを指定します。
  4. 「開始セル」に、ファイル名の読み取りを始めるセルを入力します。例: A1、B3
  5. 出力先フォルダーを選び、「分割を実行」を押します。
PDFを1ページずつ分割するPythonツールの画面。PDF、Excel、シート、開始セル、出力先フォルダーの入力欄と「分割を実行」ボタンがある
分割するPDFとExcel、シート、開始セル、出力先フォルダーを指定する画面です。

画面の項目

  • 分割するPDF:[参照…]を押して、分割したいPDFを選びます。
  • Excelファイル:[参照…]からファイル名を入力したExcelブック(.xlsx または .xlsm)を選びます。ブックを選ぶと、シート名が読み込まれ、現在のシートが初期選択されます。
  • シート:ファイル名を入力したシートを選びます。
  • 開始セル:ファイル名の読み取りを始めるセルを入力します。たとえば A1 を指定すると、1ページ目はA1、2ページ目はA2、3ページ目はA3の値を使います。
  • 出力先フォルダー:分割後のPDFを保存する場所を選びます。PDFを選んだ時点でこの欄が空なら、元のPDFと同じフォルダーが自動で設定されます。別の場所に保存する場合は[参照…]から変更してください。
  • 分割を実行:指定したPDFとExcelの内容を確認して、分割を始めます。

実行後、成功すると分割したページ数と保存先を知らせる画面が表示されます。必須項目が未入力の場合は警告、セルの空欄や重複などで処理できない場合はエラーが表示されます。

開始セルから同じ列を下方向へ読み取り、PDFの各ページに順番に対応させます。たとえば開始セルが B3 なら、1ページ目はB3、2ページ目はB4、3ページ目はB5を使います。

出力先に同じ名前のファイルがある場合は、上書きせずに処理を中止します。

使用しているライブラリ

PDFの処理にはpypdf、Excelのセル値の読み取りにはopenpyxlを使っています。

  • pypdf はPDFを開き、ページを読み取って、1ページずつ別のPDFとして保存するためのライブラリです。
  • openpyxl はExcelブックを開き、指定したセルの値を読み取るためのライブラリです。
  • tkinter はファイル選択画面など、ツールの画面を作るために使っています。Pythonに付属する標準ライブラリなので、通常は別途インストールする必要はありません。

なお、openpyxlはExcelの数式を再計算しません。数式セルは、Excelがブックに保存した計算結果を読み取ります。保存済みの計算結果がない場合は、Excelでブックを開いて保存し直してから実行してください。

事前検査と注意点

  • 空欄、Windowsで使えない文字、予約名、重複した名前がある場合は、処理を始めずエラーを表示します。
  • 同じ名前の出力ファイルがすでにある場合は、上書きしません。
  • 保存先の一時フォルダーに全ページを書き出してから出力先へ移動します。
  • パスワードで保護され、空のパスワードで開けないPDFは、あらかじめ保護を解除してから使用してください。

スクリプトとライセンス

スクリプト、使い方の説明、サンプルExcelとPDFは、GitHubリポジトリに置いています。リポジトリはMIT Licenseで公開しています。テストファイルは開発・保守時の確認用なので、通常の利用では実行する必要はありません。

PDFを手作業で分割して名前を付けている方は、サンプルファイルで操作を試してみてください。

コメント

タイトルとURLをコピーしました