セルの装飾をしてExcelファイルの出力
社員情報を一覧で管理するExcelファイルから
社員情報個別にExcelファイルを出力するイメージです
最終形態の出力結果は次の通りです
まずヘッダ部のみ作成していきます
『枠線』『背景色』『フォント』『揃え』『セル結合』
を解説していきます。
取り込み元Excelファイルは
次のようなフォーマットです
こちらの記事で使用したソースコードを流用
モジュール
インポートするモジュール
1 2 3 4 |
import openpyxl as px from openpyxl.styles.borders import Border, Side from openpyxl.styles.fonts import Font from openpyxl.styles.alignment import Alignment |
セルの枠線
シンプルな枠線を定義します
1 2 3 4 5 6 |
# 罫線(外枠)を設定 border = Border(top=Side(style='thin', color='000000'), bottom=Side(style='thin', color='000000'), left=Side(style='thin', color='000000'), right=Side(style='thin', color='000000') ) |
セルの背景色
ヘッダ部の背景書を定義します
カラーコードで『ライトブルー』を定義
1 2 3 4 |
# 背景色を変更 cellColor = px.styles.PatternFill(patternType='solid', fgColor='add8e6', bgColor='add8e6') |
フォント
『タイトル用フォント』
『ヘッダ用フォント』を定義します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# タイトルフォント titleFontStyle = Font(name='Calibri', size=15,# フォントサイズ bold=True,# 太く italic=True,# 斜体 underline="none",# 下線 (double:2本線 single:1本線 none:無し) strike=False,# 取り消し線 color='000000') # 文字色 # ヘッダフォント headerFontStyle = Font(name='Calibri', size=15,# フォントサイズ bold=True,# 太く italic=True,# 斜体 underline="none",# 下線 (double:2本線 single:1本線 none:無し) strike=False,# 取り消し線 color='1e90ff') # 文字色 |
bold(太く)
太く | プロパティ |
---|---|
太くする | True |
太くしない | False |
strike(取り消し線)
取り消し線 | プロパティ |
---|---|
取り消し線をつける | True |
取り消し線をつけない | False |
italic(斜体)
斜体 | プロパティ |
---|---|
斜めにする | True |
斜めにしない | False |
underline(下線)
下線 | プロパティ |
---|---|
2本線 | double |
1本線 | single |
無し | none |
セル「揃え」
1 2 3 4 |
# セル「揃え」 alignment = Alignment(horizontal = 'center', vertical = 'center', wrap_text = False) |
horizontal(水平方向)
位置 | プロパティ |
---|---|
左揃え | left |
中央揃え | center |
均等割り付け | distributed |
標準 | general |
両端揃え | justify |
右揃え | right |
vertical(垂直方向)
位置 | プロパティ |
---|---|
下揃え | bottom |
中央揃え | center |
均等割り付け | distributed |
両端揃え | justify |
上揃え | top |
wrap_text(文字の改行)
改行 | プロパティ |
---|---|
改行する | True |
改行しない | Falser |
タイトル、ヘッダセルの装飾
前述で定義した『枠線』『揃え』『フォント』を
『対象セル』へ設定し装飾を行います
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# タイトルセルの装飾 sheet['A1'].font = titleFontStyle # セルに罫線を設定 range[(開始 ~ (終了 - 1)] for row_num in range(2,9): for col_num in range(1,4): sheet.cell(row=row_num ,column=col_num).border = border sheet.cell(row=row_num ,column=col_num).alignment = alignment # ヘッダセルの装飾 for row_num in range(2,9): for col_num in range(1,2): # セルの色 sheet.cell(row=row_num ,column=col_num).fill = cellColor # フォントを指定 sheet.cell(row=row_num ,column=col_num).font = headerFontStyle |
補足解説:range関数を使用して、Excelの2行目~8行目までを対象としています。
※range[(開始 ~ (終了 – 1)]
1 |
for row_num in range(2,9): |
補足解説:range関数を使用して、Excelの1列目~3列目までを対象としています。
※range[(開始 ~ (終了 – 1)]
1 |
for col_num in range(1,4): |
セルの結合
『タイトル』『ヘッダ』セルを結合します
1 2 3 4 5 6 7 8 9 10 11 |
# ヘッダセルの結合 # タイトルセル sheet.merge_cells('A1:C1') # ヘッダセル sheet.merge_cells('A2:B2') sheet.merge_cells('A3:B3') sheet.merge_cells('A4:B4') sheet.merge_cells('A5:B5') sheet.merge_cells('A6:B6') sheet.merge_cells('A7:B7') sheet.merge_cells('A8:B8') |
サンプルソース
サンプルソースの全文です
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
import xlrd # 取り込み対象のExcelファイル名 IMPORT_FILE_NAME = "userlist.xlsx" # Excelファイルの読み込み wb = xlrd.open_workbook('C:\\Python\\tmp\\' + IMPORT_FILE_NAME) # [社員リスト]シートを取得 userListSheet = wb.sheet_by_name('社員リスト') # Excelから読み込んだ社員情報をリストで保持 userInfoList = [] for row_index in range(userListSheet.nrows): # タイトルとヘッダ行を除外して、データ行のみ取得 if row_index >= 2: row = userListSheet.row(row_index) # 1行の情報を連想配列で保持 userInfo = {"No" : row[0].value, "名前" : row[1].value, "年齢" : row[2].value, "部署" : row[3].value, "区分" : row[4].value} # 配列へ格納します userInfoList.append(userInfo) ################################################ #Excelファイルの作成 ################################################ import openpyxl as px from openpyxl.styles.borders import Border, Side from openpyxl.styles.fonts import Font from openpyxl.styles.alignment import Alignment # 罫線(外枠)を設定 border = Border(top=Side(style='thin', color='000000'), bottom=Side(style='thin', color='000000'), left=Side(style='thin', color='000000'), right=Side(style='thin', color='000000') ) # 背景色を変更 cellColor = px.styles.PatternFill(patternType='solid', fgColor='add8e6', bgColor='add8e6') # タイトルフォント titleFontStyle = Font(name='Calibri', size=15,# フォントサイズ bold=True,# 太く italic=True,# 斜体 underline="none",# 下線 (double:2本線 single:1本線 none:無し) strike=False,# 取り消し線 color='000000') # 文字色 # ヘッダフォント headerFontStyle = Font(name='Calibri', size=15,# フォントサイズ bold=True,# 太く italic=True,# 斜体 underline="none",# 下線 (double:2本線 single:1本線 none:無し) strike=False,# 取り消し線 color='1e90ff') # 文字色 # セル「揃え」 alignment = Alignment(horizontal = 'center',# 水平方向 vertical = 'center',# 垂直方向 wrap_text = False)# 文字の改行 # ブック book = px.Workbook() # 1シート目 sheet = book.active #シート名を個人の名前へ変更 sheet.title = "サンプル" # タイトル sheet["A1"].value = "社員情報" # ヘッダ情報を出力 sheet["A2"].value = "NO" sheet["A3"].value = "名前" sheet["A4"].value = "年齢" sheet["A5"].value = "部署" sheet["A6"].value = "区分" sheet["A7"].value = "備考" sheet["A8"].value = "出力日付" # ヘッダセルの結合 sheet.merge_cells('A1:C1') sheet.merge_cells('A2:B2') sheet.merge_cells('A3:B3') sheet.merge_cells('A4:B4') sheet.merge_cells('A5:B5') sheet.merge_cells('A6:B6') sheet.merge_cells('A7:B7') sheet.merge_cells('A8:B8') # タイトルセルの装飾 sheet['A1'].font = titleFontStyle # セルに罫線を設定 range[(開始 ~ (終了 - 1)] for row_num in range(2,9): for col_num in range(1,4): sheet.cell(row=row_num ,column=col_num).border = border sheet.cell(row=row_num ,column=col_num).alignment = alignment # ヘッダセルの装飾 for row_num in range(2,9): for col_num in range(1,2): # セルの色 sheet.cell(row=row_num ,column=col_num).fill = cellColor # フォントを指定 sheet.cell(row=row_num ,column=col_num).font = headerFontStyle # EXCELファイル出力 book.save('C:\\Python\\tmp\\出力テスト.xlsx') |
まとめ:Python Excel ファイルの出力 サンプルソース セル結合 背景色フォント等
Excelファイルの出力を『セルの装飾』を含め解説しました
『セルの装飾』はプログラム側で、簡単かつ自由に設定できそうです
次回は、取り込み元のExcelファイルの情報を埋め込んだ
Excel出力を含めて解説します
本ブログでは、できるだけわかりやすくをコンセプトに
画像多め + サンプルソース公開を意識して作成しています
皆様の問題解決に、お力添えできれば幸いです
コメント