Microsoft Excelでスプレッドシートやドキュメントの見た目を整える場合、テキストの右そろえや左そろえといった「そろえ(アライメント)」を調整する方法が有効だ。今回は、Pythonからこのそろえを制御する方法を取り上げる。
連載「PythonでExcel作業の効率化を図ろう」のこれまでの回はこちらを参照。
セルの中のテキストの位置
本連載ではこれまでセルに入力するテキストの表示場所について触れてこなかった。Microsoft Excelはセルにおけるテキストの表示をデフォルトで設定しており、テキストの種類によって次のような表示を行っている。
- テキスト - 左そろえ、上下中央そろえ
- 数値 - 右そろえ、上下中央そろえ
このテキストの配置位置は任意に変更することができる。垂直方向に上中下、左右方向に対して左中右と設定可能だ。
Microsoft Excelで書類を作成している場合など、セルの中のテキストの位置を変更することがデザインの良し悪しにつながるので、この調整は見栄えにおいて重要になってくる。PythonからはOpenPyXLを使うことでこのセルの中のテキストの配置を設定できる。
テキストそろえを行うPythonスクリプト
最初に今回の成果物を取り上げる。次のPythonスクリプトを実行すると、Pythonからテキストそろえを行ったサンプルデータを生成することができる。
openpyxl_sample_alignment_1.py
import openpyxl
from openpyxl.styles import Alignment
from openpyxl.styles import Font
from openpyxl.styles import Border, Side
#=========================================================================
# 保存するファイルのパス
#=========================================================================
output_xlsx_file_path = 'サンプルファイル.xlsx'
#=========================================================================
# Microsoft Exce データの生成とワークシートの取得
#=========================================================================
# 新規ワークブックの作成
wb = openpyxl.Workbook()
# アクティブワークシートの取得
ws = wb.active
#=========================================================================
# セルのサイズを設定
#=========================================================================
# セル幅を設定
ws.column_dimensions['A'].width = 8 # A列幅[文字数]
ws.column_dimensions['B'].width = 35 # B列幅[文字数]
ws.column_dimensions['C'].width = 35 # C列幅[文字数]
ws.column_dimensions['D'].width = 35 # D列幅[文字数]
ws.column_dimensions['E'].width = 35 # E列幅[文字数]
ws.column_dimensions['F'].width = 35 # F列幅[文字数]
# セル高さを設定
ws.row_dimensions[1].height = 30 # 1目行高さ[ポイント]
ws.row_dimensions[2].height = 70 # 2目行高さ[ポイント]
ws.row_dimensions[3].height = 70 # 3目行高さ[ポイント]
ws.row_dimensions[4].height = 70 # 4目行高さ[ポイント]
ws.row_dimensions[5].height = 70 # 5目行高さ[ポイント]
ws.row_dimensions[6].height = 70 # 6目行高さ[ポイント]
#=========================================================================
# セルのフォントを設定
#=========================================================================
for row in ws['B2:E5']:
for cell in row:
cell.font = Font(name='メイリオ', size=20)
#=========================================================================
# 罫線の定義
#=========================================================================
# 細罫線
thin_border = Border(
left=Side(style='thin'),
right=Side(style='thin'),
top=Side(style='thin'),
bottom=Side(style='thin')
)
#=========================================================================
# 罫線を設定
#=========================================================================
ws['C2'].border = thin_border # 細罫線
ws['D2'].border = thin_border # 細罫線
ws['E2'].border = thin_border # 細罫線
ws['B3'].border = thin_border # 細罫線
ws['B4'].border = thin_border # 細罫線
ws['B5'].border = thin_border # 細罫線
ws['C3'].border = thin_border # 細罫線
ws['D3'].border = thin_border # 細罫線
ws['E3'].border = thin_border # 細罫線
ws['C4'].border = thin_border # 細罫線
ws['D4'].border = thin_border # 細罫線
ws['E4'].border = thin_border # 細罫線
ws['C5'].border = thin_border # 細罫線
ws['D5'].border = thin_border # 細罫線
ws['E5'].border = thin_border # 細罫線
#=========================================================================
# テキストのアライメントを設定
#=========================================================================
ws['C2'].alignment = Alignment(horizontal='left')
ws['D2'].alignment = Alignment(horizontal='center')
ws['E2'].alignment = Alignment(horizontal='right')
ws['B3'].alignment = Alignment(horizontal='right', vertical='top')
ws['B4'].alignment = Alignment(horizontal='right', vertical='center')
ws['B5'].alignment = Alignment(horizontal='right', vertical='bottom')
ws['C3'].alignment = Alignment(vertical='top', horizontal='left')
ws['D3'].alignment = Alignment(vertical='top', horizontal='center')
ws['E3'].alignment = Alignment(vertical='top', horizontal='right')
ws['C4'].alignment = Alignment(vertical='center', horizontal='left')
ws['D4'].alignment = Alignment(vertical='center', horizontal='center')
ws['E4'].alignment = Alignment(vertical='center', horizontal='right')
ws['C5'].alignment = Alignment(vertical='bottom', horizontal='left')
ws['D5'].alignment = Alignment(vertical='bottom', horizontal='center')
ws['E5'].alignment = Alignment(vertical='bottom', horizontal='right')
#=========================================================================
# アライメントの説明を入力
#=========================================================================
ws['C2'] = '←左そろえ'
ws['D2'] = '中央↔そろえ'
ws['E2'] = '右そろえ→'
ws['B3'] = '上そろえ↑'
ws['B4'] = '上下中央そろえ↕'
ws['B5'] = '下そろえ↓'
ws['C3'] = '←左そろえ'
ws['D3'] = '中央↔そろえ'
ws['E3'] = '右そろえ→'
ws['C4'] = '←左そろえ'
ws['D4'] = '中央↔そろえ'
ws['E4'] = '右そろえ→'
ws['C5'] = '←左そろえ'
ws['D5'] = '中央↔そろえ'
ws['E5'] = '右そろえ→'
#=========================================================================
# 生成したMicrosoft Excelデータをファイルへ保存
#=========================================================================
wb.save(output_xlsx_file_path
liopenpyxl_sample_alignment_1.pyを実行すると、次のようなMicrosoft Excelファイルが生成される。
セルの中のテキスト配置を自在に行えていることが確認できる。