OS: Windows10
バージョン: 3.7.9
想定シナリオ:
6列のエクセル(1行目ヘッダー)から
ヘッダーを除いて1,3,5列のみ取得して、3列目の昇順にソートしてエクセルへ出力
前提:
python -m pip install openpyxl
from openpyxl import Workbook
from openpyxl import load_workbook
import random
from operator import itemgetter
# テスト用ファイル作成
wb1 = Workbook()
ws1 = wb1.active
ws1.append(['col1','col2','col3','col4','col5','col6'])
for i in range(10):
values = []
values.append('A'+str(i) )
values.append('B'+str(i) )
values.append(random.randrange(100) )
values.append(i*4)
values.append(i*5)
values.append(i*6)
ws1.append(values)
wb1.save('a.xlsx')
# ファイル加工
wb2 = load_workbook(filename='a.xlsx', read_only=True)
sheetname = wb2.sheetnames[0]
ws2 = wb2[sheetname]
wb3 = Workbook()
ws3 = wb3.active
# シートの内容を取得
# 1カラム目が空になったら終了
keys = ['col1','col2','col3']
dict3_list = []
for row in ws2.iter_rows(min_row=2):
if row[0].value is None:
break
values = []
for col in row:
values.append(col.value)
print(values)
values = []
values.append(row[0].value )
values.append(row[2].value )
values.append(row[4].value )
dict3 = dict( zip(keys,values) )
print( dict3 )
dict3_list.append(dict3)
print(dict3_list)
sorted_list = sorted(dict3_list, key=itemgetter("col2"))
print(sorted_list)
# ソート済み辞書をエクセルに書き込む
for row in sorted_list:
if row["col1"] is None:
break
print(row)
values = list( row.values() )
ws3.append(values)
wb3.save('b.xlsx')
# ワークブックデータ確認
for row in ws3.iter_rows(min_row=1):
if row[0].value is None:
break
values = []
for col in row:
values.append(col.value)
print(values)
wb3.close()
wb2.close()
wb1.close()