さっき作ったエクセルの資料を印刷したんだけど、1ページに収まってなかった…。
余白を狭くすれば収まると思うんだけど、openpyxlで余白の設定を変更できるの?
できます!
では今回は、「openpyxlで印刷時の余白を変更する方法」を
できるだけわかりやすく解説いたします。
また、「印刷の向き」や「倍率を変更して1ページに収める方法」
も紹介いたしますので、ぜひ最後まで読んでいってください。
openpyxlで印刷時の余白を変更するには
「page_margins」を使います。まずは全コードと実行結果をお見せします。
解説は後ほど行います。
全コード
import openpyxl
wb = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws = wb['Sheet1']
ws.page_margins.left = 0.1
ws.page_margins.right = 0.2
ws.page_margins.top = 0.3
ws.page_margins.bottom = 0.4
ws.page_margins.header = 0.5
ws.page_margins.footer = 0.6
wb.save('C://Utatane/output.xlsx')
ws.page_margins.left = 0.1
実行結果
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、既存ファイルを開いて保存する方法など、基本解説も行っておりますのでご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
ws.page_margins.left = 0.1
上記一文にて、左側の余白を変更することができます。
エクセルの「ページレイアウト」→「余白」→「ユーザー設定の余白」で出てくる「ページ設定」画面でいうところの、「左(L):」のところになります。
【コード解説】
ワークシートが入った変数に続けて、「.page_margins.left」を書き、「=(イコール)」を書きます。
右辺には「変更後の余白サイズ(インチ)」を書いてください。
【注意】
右辺の余白サイズですが、単位は「インチ」です。
一方、エクセルの画面で表示される余白サイズは、単位が「センチメートル」です。
単位が違うのでご注意ください。
(「1インチ」=「約2.54センチメートル」です)
実行してみましょう。
余白が変更されました。
数値が指定と違うのは、前述した「単位の違い」によるものです。
※エクセルの画面は「センチメートル」、コードは「インチ」
コードで指定した「0.1」インチは、センチメートルで表すと「約0.3」になります。
分かりにくい場合は、下記コードのように「まずはセンチメートル表記(0.3)」で書き、「/2.54」をしてインチに直しましょう。
ws.page_margins.left = 0.3/2.54
左の余白以外にも設定を変更することが可能です。
- page_margins.left:左
- page_margins.right:右
- page_margins.top:上
- page_margins.bottom:下
- page_margins.header:ヘッダー
- page_margins.footer:フッター
これで各部分の余白の設定を変更できます。
しかしながら、余白の変更はめんどうと思う方も多いかもしれません…。
毎月のデータなど、内容に前例があれば余白も同じで対応できますが、初めて作る書類なら1つ1つ設定して微調整しなければなりません。
そんな面倒な余白設定をせずに、記載内容を1ページに収める方法があります。
次項で紹介いたします。
余白を変更せず1ページに収めて印刷する方法
前項で余白の変更方法を紹介いたしました。
ここからは、余白の変更をせずに印刷内容を1ページに収める方法を紹介いたします。
早速コードを見ていきましょう。
import openpyxl
wb = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws = wb['Sheet1']
ws.sheet_properties.pageSetUpPr.fitToPage = True
ws.page_setup.fitToWidth = 1
ws.page_setup.fitToHeight = 1
wb.save('C://Utatane/output.xlsx')
コードの6行目で、印刷設定を行います。
エクセルの「余白設定する画面」の中にある「ページ」タブを開くと、「次のページ数に合わせて印刷」というのがあります。
コレにチェックを入れる記述です。
コード7行目の「fitToWidth」は「横」、8行目の「fitToHeight」は「縦」にそれぞれ対応しています。
両方の右辺を「1」にすることで、縦も横も1ページに収まるように印刷することができます。
全体的に倍率を縮小して印刷しているという感じです。
1ページに収めなくても、倍率を少し変更したいという方は下記コードのように記述してみてください。
import openpyxl
wb = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws = wb['Sheet1']
ws.page_setup.scale = 80
wb.save('C://Utatane/output.xlsx')
6行目の右辺は倍率です。
80なら80%になります。
別の記事にて、ブロックごとに分けて印刷できる「改ページ」を設定する方法を紹介しております。ご参考ください。
印刷の向きを変更する方法
最後に、印刷の向きを変更する方法を紹介いたします。
横向きの資料を作る時も多いと思いますので活用してください。
import openpyxl
wb = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws = wb['Sheet1']
ws.page_setup.orientation = 'landscape'
wb.save('C://Utatane/output.xlsx')
コードの6行目で印刷の向きを「横」にしています。
横向きを縦向きにするには、右辺を「portrait」にします。
- page_setup.orientation = ‘landscape’:横向き
- page_setup.orientation = ‘portrait’:縦向き
実行してみましょう。
横向きにすることができました。
うまく動作しない場合の対処法
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlで余白を変更する方法を解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!