前提・実現したいこと
Python3(openpyxl)を使って、Excelの在庫表を管理するプログラムを作成しています。
自力でなんとか動かせるところまでと考えていましたが、詰まってしまいました。
行いたい処理全体の流れとして、
1.Pythonスクリプトを実行すると、商品コードを入力するよう要求され、
↓
2.商品コードを手入力するとあとは自動でカタログから検索、商品情報を取得し必要情報をSheet2上に貼り付けて整理、
↓
3.商品コードから在庫表(Sheet1)を照会して既に在庫にある商品か、新規の商品かを判断、
↓
4.既に在庫リストにあれば個数に+1、なければ最終行に追加し、在庫数を1とする。
という処理をさせたいと考えています。
上記2の必要情報を整理するところまでは出来ているので、今回のソースコードは問題が起こっている部分(3以降)を記載しています。
ソースコード上では在庫リスト(Excelファイル)は、list_example.xlsxという名前にしています。
在庫リストExcelファイルにはSeet1(在庫表があるシート)と、
Sheet2(私の技術不足によりデータ取得の際に必要情報のみに整えられないため、このシート上でデータクレンジングもどきを行うためのシート)があります。
Sheet2[A3]の情報をもとにSheet1[A列]へ照会し、もしSheet2[A3]がSheet1(在庫管理表)にない商品だった場合、Sheet2の商品情報[A3][B3]をSheet1へコピーして貼り付け、在庫数に1を入力する形になっています。
Sheet1(在庫管理表)にある商品だった場合、在庫数に+1とします。
発生している問題・エラーメッセージ
エラーなく実行されますが、以下の在庫表に有の場合にうまく処理できないことが有ります。
在庫表に有の場合:在庫リストの在庫数に+1する。
在庫表に無の場合:リストの最終行に商品コード等の情報を追加し、在庫数を1とする。
在庫表に有の場合の処理について、
在庫表の最終行に合致する物品がある場合は問題なく在庫数に+1されるのですが、
合致する物品が最終行にない(途中の行にある)場合、最終行に新たに追加される(在庫表に存在するのに在庫表に無の場合の処理が行われる)という結果になってしまいます。
該当のソースコード
python3
1import openpyxl 2 3wb = openpyxl.load_workbook('list_examle.xlsx') 4sheet_pre = wb["Sheet2"] 5sheet_fin = wb["Sheet1"] 6 7#有無を照会したい商品コード(Sheet2のA3)を取得する。 8code = sheet_pre['A3'].value 9 10#最終行を規定し、範囲データ(検索対象;A列)を取得。 11last_row = sheet_fin.max_row 12A_column = sheet_fin['A'] 13 14#範囲データ内で商品コードを検索し、有無で処理を分岐する。 15for cell in A_column: 16 #該当cellと、同行の在庫セル位置(2つ右)を取得する。 17 cell_value = cell.value 18 o = cell.offset(0,2) 19 offset = o.value 20 21#在庫リストに商品コードが存在する場合、在庫数に+1する。 22if code in [cell_value]: 23 o.value = o.value + 1 24#在庫リストに商品コードが存在しない場合、リスト最終行に追加し、在庫を1とする。 25else: 26 sheet_fin.cell(row=last_row+1,column=1).value = sheet_pre['A3'].value 27 sheet_fin.cell(row=last_row+1,column=2).value = sheet_pre['B3'].value 28 sheet_fin.cell(row=last_row+1,column=3).value = 1 29 30#ロードしたexcelファイルを保存(上書き)する。 31wb.save('list_examle.xlsx') 32
疑問点
商品コード検索対象の辺り(forまわり)がおかしいのだろうとは思っているのですが、具体的に何がまずいのか分かりません。
「ここがおかしい」または「別の方法をとった方が良い」など、ご教示いただければと思います。
補足情報(FW/ツールのバージョンなど)
Mac OS 10.14.6
Python 3.7.4
openpyxl 3.0.3
Excel for Mac 16.16.21
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/06 17:51