※下記プログラム内容のイメージ
①コピーしたい値のあるシートを開く
②複数あるコピー先シートをfor文にて順番に開く(for key, value in so_dict.items)
③コピー元のエクセルを5行目から順次取得(for row in ws1.iter_rows(min_row=5))
④ifにて3列目に空白セルがある場合はその行を飛ばす
⑤セルのコピー、セルの貼付け、文字入力を行う
⑥保存
⑦コピー元のエクセルデータ、6行目・・・最終行まで上記内容の繰り返しをしてコピー先のエクセル
データ全てに反映させたい。
現在、下記内容のプログラムを実行するとエラーがでます。
どのように修正したらいいか教えていただけないでしょうか。
Python
1import os 2import openpyxl 3import datetime 4 5hh = datetime.date.today().year#シート名取得のための記述 6sheet_name = (str(hh - 1992) + '期')#コピー先シート名取得 7wb1 = openpyxl.load_workbook('C:\Users\1.xlsm',data_only=True)#コピー元ブック読込 8ws1 = wb1['検針表']#コピー元シート読込 9 10for key, value in so_dict.items():#コピー先ファイル取得 11 for v in value: 12 wb = openpyxl.Workbook(f'C:\Users\個別表\{key}\{v}.xlsx') 13 ws = ['sheet_name']#コピー先シート取得 14 for row in ws1.iter_rows(min_row=5):#5行目から順次(iter_rows)取得 15 if row[2].value is None:#2行目(fow[2])空白セルのある行は飛ばして処理 16 continue 17 kensin = ws1.cell(row = 1, column = 5).value#セルコピー 18 ws.cell(row = ws.max_row + 1,column = 9, value = kensin)#セル貼付け 19 kensin1 = ws1.cell(row = 1, column = 6).value#セルコピー 20 ws.cell(row = ws.max_row + 1,column = 3, value = kensin1)#セル貼付け 21 kensin2 = ws1.cell(row = 1, column = 7).value#セルコピー 22 ws.cell(row = ws.max_row + 1,column = 5, value = kensin2)#セル貼付け 23 ws.cell(row = ws.max_row + 1,column = 2).value = ('ガス料金')#指定セルに文字入力 24 wb.save(f'C:\Users\個別表\{key}\{v}.xlsx') 25 26[エラー内容] 27--------------------------------------------------------------------------- 28AttributeError Traceback (most recent call last) 29<ipython-input-33-f2b603949271> in <module> 30 16 continue 31 17 kensin = ws1.cell(row = 1, column = 5).value#セルコピー 32---> 18 ws.cell(row = ws2.max_row + 1,column = 9, value = kensin)#セル貼付け 33 19 kensin1 = ws1.cell(row = 1, column = 6).value 34 20 ws.cell(row = ws2.max_row + 1,column = 3, value = kensin1) 35 36AttributeError: 'list' object has no attribute 'cell' 37 38 39[補足資料] 40so_dict = {1: ['1-1 可茂','1-2 幸内','1-3 土屋','1-4 田中'],2: ['2-1 渡辺','2-2 渡辺','2-3 土屋','2-4 田舎'],3: ['3-1 今瀬','3-2 今瀬','3-3 加藤','3-4 古田']} 41辞書の内容としては、key=フォルダ名 value=エクセルファイル名 となります。 42 43・・・下記内容で値だけ取得すると 44for row in ws1.iter_rows(min_row=2): 45 if row[2].value is None: 46 continue 47 values = [] 48 for col in row: 49 values.append(col.value) 50 print(values) 51「出力内容」 52['地区', None, '氏名', '前回指針', '今回指針', '使用量 ', '売掛金'] 53['室①', None, '1-1 可茂', 1, 10, 9, 7290] 54['室①', None, '1-2 幸内', 1, 11, 10, 3800] 55['室①', None, '1-3 土屋', 1, 12, 11, 8420] 56['室①', None, '1-4 田', 1, 13, 12, 8980] 57・・・長くなるので省略します。 58 59 60となります。氏名ごとにエクセルブックがありますので、この各行の必要な値を 61コピー、貼付らけした、次の人のエクセルブックを開いてまた、コピー貼り付けしたいです。 62コピー元のデータとコピー先のファイルの並びは同じになっていますのでfor文で順次コピー元 63のリストからコピーして貼付けで問題なく処理できるようにしたつもりです。 64 65お手数おかけしますがご教授お願いいたします。
この質問の投稿者はすでに退会しているため、質問者からの返信がない点にご留意ください。
回答1件
この質問の投稿者はすでに退会しているため、質問者からの返信やベストアンサーの選定がない点にご留意ください。
あなたの回答
tips
プレビュー