初心者でも簡単!PythonとopenpyxlでExcelの印刷倍率を指定する方法

openpyxl

はじめに:Excelの面倒な「印刷倍率設定」、Pythonで自動化しよう

「月末に大量のExcelレポートを印刷しなきゃいけないけど、一つひとつ印刷設定を開いて、倍率を調整するのが本当に面倒…」 「データはプログラムで自動生成できるようになったのに、最後の印刷設定だけ手作業で、どうにかならないかな?」

もしあなたがこんな風に感じているなら、この記事はきっとお役に立てます。

この記事では、Pythonの**openpyxl**というライブラリを使って、Excelファイルの印刷倍率(拡大・縮小率)を自動で設定する方法を、プログラミング初心者の方にも分かりやすく解説します。

openpyxlは、PythonでExcelを自由に扱うための、まるで魔法の道具のようなライブラリです。この記事を読み終える頃には、あなたは面倒な手作業から解放され、ボタン一つで理想の印刷設定を完了させるスキルを身につけているはずです。

コピペしてすぐに使えるサンプルコードもたくさん用意したので、ぜひ一緒に手を動かしながら読み進めてみてください!


ステップ1:準備は一瞬!openpyxlをインストールしよう

まずは、PythonでExcelを操作するための準備をしましょう。

openpyxlライブラリをインストールします。

インストールは、たった一行のコマンドを実行するだけなので、一瞬で終わります。

Windowsをお使いの方は「コマンドプロンプト」を、Macをお使いの方は「ターミナル」を開いて、以下のコマンドをコピー&ペーストしてEnterキーを押してください。

pip install openpyxl

Successfully installed openpyxl-...のようなメッセージが表示されれば準備完了です。もしすでにインストール済みの場合は、その旨を伝えるメッセージが表示されます。

これだけで、あなたのPythonはExcelを操る力を手に入れました!


ステップ2:Excelの印刷倍率をパーセントで指定する基本コード

それでは、さっそく本題に入りましょう。 まずは、最もよく使う「パーセント(%)で印刷倍率を指定する方法」から解説します。Excelの画面で言うと、ページ設定の「拡大/縮小印刷」の数値をプログラムから変更するイメージです。

① Excelファイルを読み込む

最初に、操作したいExcelファイルをPythonに読み込ませます。 ここではsample.xlsxという名前のExcelファイルが、作成するPythonプログラムと同じフォルダにあると仮定して進めます。

import openpyxl

# Excelファイルを読み込む
wb = openpyxl.load_workbook("sample.xlsx")

# 現在アクティブなシート(一番手前に表示されているシート)を選択する
ws = wb.active

openpyxl.load_workbook("ファイル名")で指定したExcelファイルを開き、wb.activeで操作対象のシートを選んでいます。これで、wsという変数を使ってシートの様々な設定を変更できる状態になりました。

② 印刷倍率を設定して保存する

次に、印刷倍率を設定します。

worksheet.page_setup.scaleというプロパティに数値を設定するだけです。

例えば、印刷倍率を80%に縮小したい場合は、以下のように記述します。

# 印刷倍率を80%に設定
ws.page_setup.scale = 80

たったこれだけです。とても直感的で簡単ですよね。

そして、設定を変更したら、最後に必ずファイルを保存するのを忘れないでください。保存しないと、せっかくの設定がExcelファイルに反映されません。

# 変更内容を新しい名前で保存する
wb.save("sample_scaled.xlsx")

元のファイルを上書きしたくない場合は、save()の際に新しいファイル名を指定するのがおすすめです。

コピペでOK!完成コード全体

①と②で解説した内容を一つにまとめた、コピー&ペーストですぐに使える完成コードはこちらです。

import openpyxl

# --- ここから ---

# 1. Excelファイルを開く
# "sample.xlsx"の部分を、あなたが操作したいファイル名に変更してください
try:
    wb = openpyxl.load_workbook("sample.xlsx")
except FileNotFoundError:
    print("エラー: sample.xlsx が見つかりません。ファイル名と場所を確認してください。")
    exit()

ws = wb.active

# 2. 印刷の拡大・縮小率を80%に設定
# Excelの「ページ設定」→「拡大/縮小印刷」のパーセントと同じです
# ここの数値を好きな倍率(例: 100, 85, 120など)に変更してください
ws.page_setup.scale = 80

# 3. 変更を保存する(別名で保存するのがおすすめです)
# "sample_scaled.xlsx" の部分を、保存したいファイル名に変更してください
output_filename = "sample_scaled.xlsx"
wb.save(output_filename)

print(f"印刷倍率の設定が完了しました。ファイル名: {output_filename}")

# --- ここまで ---

このコードをexcel_scaler.pyのような名前で保存し、同じフォルダにsample.xlsxを置いて実行してみてください。sample_scaled.xlsxという新しいファイルが作成され、そのファイルの印刷設定が80%になっているはずです。


ステップ3(応用編):「1ページにぴったり収める」も簡単!

パーセントでの指定ができるようになったら、次はこちらもよく使う「次のページ数に合わせて印刷」機能に挑戦してみましょう。openpyxlを使えば、これも驚くほど簡単に自動化できます。

横も縦も「1ページ」に収める方法

「すべての内容を1ページに収めて印刷したい」という場合は、3つのプロパティをセットで使います。

  1. page_setup.fitToPage = True:まず「ページ数に合わせる」機能をONにします。
  2. page_setup.fitToWidth = 1:横幅を1ページに収める。
  3. page_setup.fitToHeight = 1:縦幅を1ページに収める。

コードにすると以下のようになります。

import openpyxl

wb = openpyxl.load_workbook("sample.xlsx")
ws = wb.active

# 「次のページ数に合わせて印刷」機能をONにする
ws.page_setup.fitToPage = True

# 横を1ページ、縦を1ページに収める設定
ws.page_setup.fitToWidth = 1
ws.page_setup.fitToHeight = 1

# 変更を保存
wb.save("sample_fit_to_one_page.xlsx")

print("1ページに収める設定が完了しました。")

このコードを実行すると、どんなに大きな表でも、Excelが自動で倍率を調整して1枚の紙に収まるように印刷設定を変更してくれます。

横幅だけを「1ページ」に収める方法

縦に長い一覧表などで、「列(横幅)は1ページに収めたいけど、行(縦)は複数ページになっても構わない」というケースも多いですよね。

その場合は、fitToHeightの値を0に設定します。

0を設定すると、その方向(この場合は縦)のページ指定は「成り行き(無効)」になります。

import openpyxl

wb = openpyxl.load_workbook("sample.xlsx")
ws = wb.active

# 「次のページ数に合わせて印刷」機能をONにする
ws.page_setup.fitToPage = True

# 横は1ページに収める
ws.page_setup.fitToWidth = 1
# 縦は成り行き(ページ指定なし)
ws.page_setup.fitToHeight = 0

# 変更を保存
wb.save("sample_fit_to_width.xlsx")

print("横幅を1ページに収める設定が完了しました。")

このテクニックは非常に実用的で、請求書や顧客リストなど、縦長の帳票を扱う際に大活躍します。


もし、うまくいかなかったら?(よくあるエラーと解決策)

プログラミングにエラーはつきものです。ここでは、初心者が遭遇しがちなエラーとその解決策をまとめました。慌てずにチェックしてみてください。

Q. FileNotFoundErrorと表示される

A. ファイルが見つからない、というエラーです。

これは、Pythonプログラムが指定されたExcelファイルを見つけられない時に発生します。以下の2点を確認してみてください。

  • Excelファイルは、実行しているPythonプログラムと同じフォルダ(ディレクトリ)にありますか?
  • load_workbook()に指定したファイル名は、実際のファイル名と完全に一致していますか?(大文字・小文字、拡張子.xlsxなど)

Q. コードを実行したのに、Excelファイルが変わらない

A. wb.save()を書き忘れていませんか?

プログラムで変更した内容は、メモリ上で一時的に保持されているだけです。wb.save("ファイル名")を実行して、初めてExcelファイルとしてディスクに書き込まれます。

コードの最後にwb.save()が記述されているか、もう一度確認してみましょう。また、元のファイルではなく、新しいファイル名で保存してみると、変更が反映されたかどうかが分かりやすいのでおすすめです。


まとめ

今回は、Pythonのopenpyxlライブラリを使って、Excelの印刷倍率を自動で設定する方法を解説しました。 最後に、今日のポイントを振り返っておきましょう。

  • 準備pip install openpyxlコマンドでライブラリをインストールする。
  • パーセント指定ws.page_setup.scale = 数字 で設定する。
  • 1ページに収めるws.page_setup.fitToPage = True で機能をONにし、.fitToWidth.fitToHeightでページ数を指定する。
  • 保存は必須:最後に必ず wb.save() で変更をファイルに保存する。

たったこれだけの知識で、今まで手作業でポチポチやっていた面倒な印刷設定を自動化できてしまいます。この記事をきっかけに、「面倒なことはPythonにやらせる」楽しさを実感し、ぜひあなたの業務自動化の世界を広げていってください!

コメント

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