どうもこんにちは、negerです。
ID、日付、確定済みor確定待ち
というデータを振り分けるプログラムを作成したので備忘録として残します。
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 |
# エクセルを編集するモジュール import openpyxl # 日付に関するモジュール import datetime # エクセルのA1⇒1 を数字化する from openpyxl.utils import get_column_letter # 罫線を書くときに使う from openpyxl.styles.borders import Border, Side #曜日のモジュール import locale d = {} sample = [['12354587','01/30/2020 13:00','確定済み'], ['12354588','01/31/2020 11:00','確定済み'], ['12354589','01/31/2020 15:00','確定待ち'], ['12354590','01/31/2020 15:00','確定済み'], ['12354591','02/01/2020 14:00','確定待ち'], ['12354592','02/01/2020 18:00','確定待ち'], ['12354593','02/02/2020 15:00','確定済み'], ['12354594','02/01/2020 15:00','確定待ち'], ['12354595','02/02/2020 11:00','確定待ち'], ['12354596','02/03/2020 15:00','確定済み'], ['12354597','02/02/2020 14:00','確定待ち'], ['12354598','02/01/2020 11:00','確定済み'], ['12354599','02/04/2020 18:00','確定待ち']] # エクセルファイルを新規オブジェクトで作成 wb = openpyxl.Workbook() sheet = wb.active # 罫線(外枠)を設定 border = Border(top=Side(style='thin', color='000000')) # シート調整 for i in range(1,300,3): sheet.column_dimensions[get_column_letter(i)].width = 10 sheet.column_dimensions[get_column_letter(i+1)].width = 18 sheet.column_dimensions[get_column_letter(i+2)].width = 10 for i in range(1,300): # セルに罫線を設定 sheet[get_column_letter(i)+'20'].border = border sheet['A20'] ='【確定待ち】' sheet['A1'] ='【確定済み】' # ヘッダーを作る dt = datetime.datetime.now()# 今日の日付取得 for i in range(1,300,3): if i == 1: sheet[get_column_letter(i)+'2'] = dt.strftime('%m/%d') sheet[get_column_letter(i+1)+'2'] = dt.strftime('%a') sheet[get_column_letter(i)+'21'] = dt.strftime('%m/%d') sheet[get_column_letter(i+1)+'21'] = dt.strftime('%a') d[dt.strftime('%m/%d')] = i d[dt.strftime('%m/%d')+'書き込みnum'] = 3 continue dt = dt + datetime.timedelta(days=1) sheet[get_column_letter(i)+'2'] = dt.strftime('%m/%d') sheet[get_column_letter(i+1)+'2'] = dt.strftime('%a') sheet[get_column_letter(i)+'21'] = dt.strftime('%m/%d') sheet[get_column_letter(i+1)+'21'] = dt.strftime('%a') d[dt.strftime('%m/%d')] = i d[dt.strftime('%m/%d')+'書き込みnum'] = 3 d[dt.strftime('%m/%d')+'書き込み未確定num'] = 22 # 振り分けと書き込み for i in sample: dt =datetime.datetime.strptime(i[1], '%m/%d/%Y %H:%M') if dt.strftime('%m/%d') in d: if i[2] in '確定済み': sheet[get_column_letter(d[dt.strftime('%m/%d')])+ str(d[dt.strftime('%m/%d')+'書き込みnum'])] = i[0] sheet[get_column_letter(d[dt.strftime('%m/%d')]+1)+ str(d[dt.strftime('%m/%d')+'書き込みnum'])] = i[1] sheet[get_column_letter(d[dt.strftime('%m/%d')]+2)+ str(d[dt.strftime('%m/%d')+'書き込みnum'])] = i[2] d[dt.strftime('%m/%d')+'書き込み未確定num'] = d[dt.strftime('%m/%d')+'書き込みnum'] + 1 if i[2] in '確定待ち': sheet[get_column_letter(d[dt.strftime('%m/%d')])+ str(d[dt.strftime('%m/%d')+'書き込み未確定num'])] = i[0] sheet[get_column_letter(d[dt.strftime('%m/%d')]+1)+ str(d[dt.strftime('%m/%d')+'書き込み未確定num'])] = i[1] sheet[get_column_letter(d[dt.strftime('%m/%d')]+2)+ str(d[dt.strftime('%m/%d')+'書き込み未確定num'])] = i[2] d[dt.strftime('%m/%d')+'書き込み未確定num'] = d[dt.strftime('%m/%d')+'書き込み未確定num'] + 1 wb.save('サンプルデータ.xlsx') print('完了') |
今回はサンプルデータとして
[‘12354587′,’01/30/2020 13:00′,’確定済み’]
というリスト形式のデータを日付をキーに並べなおして「確定待ち」「確定済み」に分けて「サンプルデータ.xlsx」として保存します。
seleniumでデータを取得して並べなおすといったことにも活用できそうですね。
ちなみに作成されるファイルはこちらになります。
もっと良いロジックを知っている方は教えて頂けると助かります。

最高の6ヶ月!超実践型プログラミングスクール【.pro】
