### 前提・実現したいこと
openpyxlを利用し、Excel操作の自動化を考え1からプログラミングを勉強しています。
現在まだ作成途中ですが躓いており、コードもDRYでは無くお恥ずかしい限りですがお知恵をお借りしたいです。
エクセルAのシートのB列から一致する特定のワード(カテゴリA)をひっかけて、同じ行の一部のセルの列を並べ替えて別のエクセルBに貼り付けたいです。
発生している問題・エラーメッセージ
「B列に特定のワードが含まれている、かつ同じ行のD列が空白でない」 を条件に"カテゴリA"が含まれている行のセルを抜きだすようにしているつもりなのですがD列が空白でない場合もセルが抜き出されてしまいます。
エクセルA
No | カテゴリ | 設置先名 | 設置先ID | 値段 | XXX | ZZZZ | 開始 | 終了 |
---|---|---|---|---|---|---|---|---|
1 | カテゴリA | ABC | 9991 | 1,000 | 1234 | 田中 | 2019/12/23 | 2019/12/23 |
2 | カテゴリA | 123 | 9992 | 1,000 | 1111 | 佐藤 | 2019/12/23 | 2019/12/23 |
3 | カテゴリA | 456 | 9994 | 1,000 | 1234 | 田中 | 2019/12/23 | 2019/12/23 |
4 | カテゴリB | 789 | 9995 | 1,000 | 1111 | 佐藤 | 2019/12/23 | 2019/12/23 |
5 | カテゴリB | CDE | 9996 | 1,000 | 1234 | 田中 | 2019/12/23 | 2019/12/23 |
6 | カテゴリA | EFG | 1,000 | 1111 | 佐藤 | 2019/12/23 | 2019/12/23 | |
7 | カテゴリA | HIJ | 1,000 | 1234 | 田中 | 2019/12/23 | 2019/12/23 | |
8 | カテゴリA | KLM | 1,000 | 1111 | 佐藤 | 2019/12/23 | 2019/12/23 |
- エクセルB理想
ZZZZ | 設置先ID | 設置先名 | 開始 | 終了 |
---|---|---|---|---|
田中 | 9991 | ABC | 2019/12/23 | 2019/12/23 |
佐藤 | 9992 | 123 | 2019/12/23 | 2019/12/23 |
田中 | 9994 | 456 | 2019/12/23 | 2019/12/23 |
- エクセルB現実
ZZZZ | 設置先ID | 設置先名 | 開始 | 終了 |
---|---|---|---|---|
田中 | 9991 | ABC | 2019/12/23 | 2019/12/23 |
佐藤 | 9992 | 123 | 2019/12/23 | 2019/12/23 |
田中 | 9994 | 456 | 2019/12/23 | 2019/12/23 |
佐藤 | EFG | 2019/12/23 | 2019/12/23 | |
田中 | HIJ | 2019/12/23 | 2019/12/23 | |
佐藤 | KLM | 2019/12/23 | 2019/12/23 |
該当のソースコード
from openpyxl import load_workbook wb =load_workbook("ファイルパスA".xlsx, data_only=True ) wb2 =load_workbook("ファイルパスB.xlsx") ws = wb["Sheet2"] ws2 = wb2["移設先"] z = 16 #エクセルB、移設先シートの書き込みの開始行 for i in range(1,ws.max_row): if (ws.cell(row=i, column=3).value == "カテゴリA" and not ws.cell(row=i, column=4).value == ""): rowB = "B" + str(z) rowC = "C" + str(z) rowD = "D" + str(z) rowE = "E" + str(z) rowF = "F" + str(z) ws2[rowB] =(ws.cell(row=i, column=7).value) ws2[rowC] =(ws.cell(row=i, column=4).value) ws2[rowD] =(ws.cell(row=i, column=2).value) ws2[rowE] ="2015/08/12 00:00:00" ws2[rowF] ="2015/08/12 00:00:00" z += 1 wb2.save("ファイルパスB.xlsx")
試したこと
ブール演算子の優先度の問題かと思い()の位置を色々変えてみたりもしましたが症状変わりませんでした。
補足情報(FW/ツールのバージョンなど)
python 3.8.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/08 00:23