社員個別のExcelファイルを出力するサンプル
Excel操作セクションで、実践した内容をまとめて実践できるサンプルです
読み込んだ3名の社員情報を個別のExcelファイル
「佐藤 ○○」さん用、「田中 ○○」さん用、「鈴木 ○○」さん用
として出力
<実行結果>
次のように「userlist.xlsx」から読み込んだ結果
3つのファイルを出力
取り込み元Excelファイルは
次のようなフォーマットです
前回の続き、主に『セルの装飾』について解説
For文でListを展開
『userInfoList』は社員情報を3名分格納した配列
3名分のデータは取り込み元のExcelファイルから取得したデータ
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 |
for userInfo in userInfoList: book = px.Workbook() sheet = book.active #シート名を個人の名前へ変更 sheet.title = userInfo["名前"] # タイトル 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["C2"].value = userInfo["No"] sheet["C3"].value = userInfo["名前"] #小数 → 整数へ変換 → 文字列へ変換 sheet["C4"].value = str(round(userInfo["年齢"])) + " " + "歳" sheet["C5"].value = userInfo["部署"] sheet["C6"].value = userInfo["区分"] sheet["C7"].value = "" # EXCELファイル出力 book.save('C:\\Python\\tmp\\社員情報_' + userInfo["名前"] + '.xlsx') |
3名分のExcelファイルを出力することになります
サンプルソース
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 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
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 import datetime # 罫線(外枠)を設定 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)# 文字の改行 # 現在日付 today = format(datetime.date.today(), '%Y/%m/%d') # ブック book = px.Workbook() # 1シート目 sheet = book.active #シート名を個人の名前へ変更 sheet.title = "サンプル" for userInfo in userInfoList: book = px.Workbook() sheet = book.active #シート名を個人の名前へ変更 sheet.title = userInfo["名前"] # タイトル 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["C2"].value = userInfo["No"] sheet["C3"].value = userInfo["名前"] #小数 → 整数へ変換 → 文字列へ変換 sheet["C4"].value = str(round(userInfo["年齢"])) + " " + "歳" sheet["C5"].value = userInfo["部署"] sheet["C6"].value = userInfo["区分"] sheet["C7"].value = "" sheet["C8"].value = today # ヘッダセルの結合 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 # データ列の列幅を調整 sheet.column_dimensions['C'].width = 11 # EXCELファイル出力 book.save('C:\\Python\\tmp\\社員情報_' + userInfo["名前"] + '.xlsx') |
まとめ:Python Excel ファイルの出力 サンプルソース セル結合 背景色フォント等
Excelファイルの出力を『セルの装飾』を含め解説しました
『セルの装飾』はプログラム側で、簡単かつ自由に設定できそうです
コメント