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

できること
たとえば、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に入力します。

空欄や重複した名前があると、分割を始める前にエラーになります。ファイル名に使えない文字やWindowsの予約名も指定できません。
サンプルファイルはGitHubリポジトリの samplesフォルダーからダウンロードできます。個人情報や実際の書類は含まれていません。
ツールの使い方
起動.batをダブルクリックします。- 「分割するPDF」で、分割したいPDFを選びます。
- 「Excelファイル」でExcelブックを選び、対象のシートを指定します。
- 「開始セル」に、ファイル名の読み取りを始めるセルを入力します。例:
A1、B3 - 出力先フォルダーを選び、「分割を実行」を押します。

画面の項目
- 分割する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を手作業で分割して名前を付けている方は、サンプルファイルで操作を試してみてください。


コメント