今回の目的
PythonでExcelファイルを出力するときに、書式を設定する。
※例のごとく、説明はプログラムのコメントで記載しています。
プログラムの流れ
①sample.xlsxファイルを取り込む
②書式を多数設定する
③sample2.xlsxファイルに出力する
前回参考
Excel×Pythonで作業フローを効率化する方法を調べてみた②
https://qiita.com/t20190127/items/023e5dd0128252f46378
プログラム実行結果確認
※プログラムは一番下
取り込むエクセル(sample.xlsx)
出力ファイル(sample2.xlsx)
プログラム
file_edit.py
import pathlib
import openpyxl
from openpyxl.styles import Alignment, PatternFill, Font, Border, Side
import csv
# エクセルファイルを取得
wb = openpyxl.load_workbook("./data/sample.xlsx")
# sheet「名:Sheet1」を取得
ws = wb["Sheet1"]
# セルA1のデータを出力 ※パターン1
print(ws["A1"].value) #A1セルを指定して取得
# セルA1のデータを出力 ※パターン2
row1 = ws[1] #sheet「名:Sheet1」の1行目を取得
print(row1[0].value) #1行目の1列目を取得⇒結果、A1のセル
# 全データを出力
print("全データ>")
for row in ws.rows:
for cell in row:
print(cell.value)
# セルA1のデータを書き換え
ws["A1"].value = "★A1です"
# セルA1のフォント変更(ゴシック、12サイズ、太、青)
font_header = Font(name="ゴシック", size=12,bold=True,color="0000FF")
ws["A1"].font = font_header
# セルA1塗りつぶし(灰色)
ws["A1"].fill = PatternFill(patternType="solid", fgColor="808080")
# 複数セルA5~D6の塗りつぶし(緑色)
for rows in ws["A5":"D6"]:
for cell in rows:
cell.fill = PatternFill(patternType="solid", fgColor="99FFCC")
# メモ
# 条件で色を変える(CellIsRule / conditional_formatting.add)
# カラースケール(ColorScaleRule / conditional_formatting.add)
# セルA1の値位置(中央寄せ、下)
ws["A1"].alignment = Alignment(horizontal="center", vertical="bottom")
# A列の書式変更(列幅)
ws.column_dimensions["A"].width= 30
# セルB2のフォーマット変更( 3桁カンマ区切り)
ws["B2"].number_format = "#,##0"
# セルB2の枠を設定(細い、黒)
side = Side(style="thin", color="000000")
border = Border(left=side,right=side,top=side,bottom=side)
ws["B2"].border = border
# セルA2,A3のセル結合
ws.merge_cells("A2:A3")
# 読み込んだエクセルを別名で保存
# ※上書きの場合は読み込みファイルパスを指定
wb.save("./data/sample2.xlsx")
まとめ
どうでしょうか。前回から比べると、仕事でつかえる形になってきている気がします。
また、次回はグラフ・PDFを試したいなぁと思っています。
以上です(*'▽')