PythonでのExcel操作勉強日記

データ抽出→ソート→別ファイル出力

Jリーグデータサイトの「天候ごとのチームの勝敗」に対して処理を行う。

J. League Data Site (j-league.or.jp)

フォルダ構成は以下で、prgから実行。

─┬data

 └prg

import openpyxl
from pprint import pprint
from operator import itemgetter
#import pandas as pd

wb = openpyxl.load_workbook(r"..\data\全チーム_天候別勝敗.xlsx")
sh = wb.active

#辞書のリストを作る
shipment_list = []
for row in sh.iter_rows():
    if row[0].row == 1:
        header_cells = row
    else:
        row_dic = {}
        for v, k in zip(header_cells, row):
            row_dic[v.value] = k.value
        shipment_list.append(row_dic)

#ソート処理
#aはチーム_大会_天候
#bは天候_大会_チーム
sorted_list_a = sorted(shipment_list, key=itemgetter("チーム","大会", "天候"))
sorted_list_b = sorted(shipment_list, key=itemgetter("天候", "大会","チーム"))

#aの転記処理
#転記準備
owb = openpyxl.Workbook()
osh = owb.active
osh.title = "チーム_大会_天候"
list_row = 1

#転記先ヘッダ処理
osh.cell(list_row,1).value = "チーム"
osh.cell(list_row,2).value = "大会"
osh.cell(list_row,3).value = "天候"
osh.cell(list_row,4).value = "試合"
osh.cell(list_row,5).value = "勝"
osh.cell(list_row,6).value = "分"
osh.cell(list_row,7).value = "敗"
osh.cell(list_row,8).value = "得点"
osh.cell(list_row,9).value = "失点"

#転記処理
for dic in sorted_list_a:
    list_row += 1
    osh.cell(list_row,1).value = dic["チーム"]
    osh.cell(list_row,2).value = dic["大会"]
    osh.cell(list_row,3).value = dic["天候"]
    osh.cell(list_row,4).value = dic["試合"]
    osh.cell(list_row,5).value = dic["勝"]
    osh.cell(list_row,6).value = dic["分"]
    osh.cell(list_row,7).value = dic["敗"]
    osh.cell(list_row,8).value = dic["得点"]
    osh.cell(list_row,9).value = dic["失点"]

#転記ファイルとして保存
owb.save(r"..\data\チーム_大会_天候.xlsx")

#bの転記処理
#転記準備
owb = openpyxl.Workbook()
osh = owb.active
osh.title = "天候_大会_チーム"
list_row = 1

#転記先ヘッダ処理
osh.cell(list_row,1).value = "チーム"
osh.cell(list_row,2).value = "大会"
osh.cell(list_row,3).value = "天候"
osh.cell(list_row,4).value = "試合"
osh.cell(list_row,5).value = "勝"
osh.cell(list_row,6).value = "分"
osh.cell(list_row,7).value = "敗"
osh.cell(list_row,8).value = "得点"
osh.cell(list_row,9).value = "失点"

#転記処理
for dic in sorted_list_b:
    list_row += 1
    osh.cell(list_row,1).value = dic["チーム"]
    osh.cell(list_row,2).value = dic["大会"]
    osh.cell(list_row,3).value = dic["天候"]
    osh.cell(list_row,4).value = dic["試合"]
    osh.cell(list_row,5).value = dic["勝"]
    osh.cell(list_row,6).value = dic["分"]
    osh.cell(list_row,7).value = dic["敗"]
    osh.cell(list_row,8).value = dic["得点"]
    osh.cell(list_row,9).value = dic["失点"]

#転記ファイルとして保存
owb.save(r"..\data\天候_大会_チーム.xlsx")

データ別にシートを分けて出力

得点ランキングに載っている選手のデータを、所属チーム単位でシートを分けて記載する。

フォルダ構成は以下で、prgから実行。

─┬indata

 ├outdata

 └prg

import openpyxl
from operator import itemgetter

wb = openpyxl.load_workbook(r"..\indata\全選手_得点データ.xlsx")
sh = wb.active

#辞書のリストを作る
shipment_list = []
for row in sh.iter_rows():
    if row[0].row == 1:
        header_cells = row
    else:
        row_dic = {}
        for k, v in zip(header_cells, row):
            row_dic[k.value] = v.value
        shipment_list.append(row_dic)

#大会順にソート
sorted_list = sorted(shipment_list,key=itemgetter("所属(J最終所属)", "得点"))

owb = openpyxl.Workbook()
osh = owb.active
osh.title = "全チーム_得点"
list_row = 1

#転記処理
#ヘッダ処理
osh.cell(list_row,1).value = "大会"
osh.cell(list_row,2).value = "順位"
osh.cell(list_row,3).value = "選手名"
osh.cell(list_row,4).value = "所属(J最終所属)"
osh.cell(list_row,5).value = "得点"
osh.cell(list_row,6).value = "シュート"
osh.cell(list_row,7).value = "出場"
osh.cell(list_row,8).value = "出場時間"
osh.cell(list_row,9).value = "1試合平均"
osh.cell(list_row,10).value = "合計"

for dic in sorted_list:
    list_row += 1
    osh.cell(list_row,1).value = dic["大会"]
    osh.cell(list_row,2).value = dic["順位"]
    osh.cell(list_row,3).value = dic["選手名"]
    osh.cell(list_row,4).value = dic["所属(J最終所属)"]
    osh.cell(list_row,5).value = dic["得点"]
    osh.cell(list_row,6).value = dic["シュート"]
    osh.cell(list_row,7).value = dic["出場"]
    osh.cell(list_row,8).value = dic["出場時間"]
    osh.cell(list_row,9).value = dic["1試合平均"]

old_key = ""
for dic in sorted_list:
    if old_key != dic["所属(J最終所属)"]:
        old_key = dic["所属(J最終所属)"]
        osh_n = owb.create_sheet(title=dic["所属(J最終所属)"])
        list_row = 1
        for i in range(1,10):
            osh_n.cell(list_row,i).value = osh.cell(list_row,i).value
        
    list_row += 1
    osh_n.cell(list_row,1).value = dic["大会"]
    osh_n.cell(list_row,2).value = dic["順位"]
    osh_n.cell(list_row,3).value = dic["選手名"]
    osh_n.cell(list_row,4).value = dic["所属(J最終所属)"]
    osh_n.cell(list_row,5).value = dic["得点"]
    osh_n.cell(list_row,6).value = dic["シュート"]
    osh_n.cell(list_row,7).value = dic["出場"]
    osh_n.cell(list_row,8).value = dic["出場時間"]
    osh_n.cell(list_row,9).value = dic["1試合平均"]

owb.save(r"..\outdata\ゴール数集計3.xlsx")

フォントを変更する処理

ファイルの全シート全行に対して、フォントをMeiryo UIに変更する。

フォルダ構成は以下で、prgから実行。

─┬indata

 ├outdata

 └prg

import openpyxl
from openpyxl.styles import Font

wb = openpyxl.load_workbook(r"..\outdata\ゴール数集計3.xlsx")
sh = wb.active

#フォント設定処理---ここから---
font = Font(name = "Meiryo UI")

for sh in wb.worksheets:
    for row in sh:
        for cell in row:
            sh[cell.coordinate].font = font

wb.save(r"..\outdata\ゴール数集計3_meiryo.xlsx")
#フォント設定処理---ここまで---

以上

タイトルとURLをコピーしました