Python openpyxl - 在比较中记录 != 匹配单元格

Python openpyxl - recording != match cells in a comparison

提问人:Dave 提问时间:11/14/2023 更新时间:11/14/2023 访问量:48

问:

我正在比较两个 Excel 工作簿之间的数据,并在第三个工作簿中记录命中。

这是 Azure-Provider-description.xlsx:

enter image description here

这是 Azure-Scrape,.xlsx:

enter image description here

这是 Azure-Actions:

enter image description here

代码如下:

from openpyxl import load_workbook

wb1 = load_workbook("Azure-Provider-description.xlsx")
ws1 = wb1["Sheet1"]
provider = ""
description = ""

wb2 = load_workbook("Azure-Scrape.xlsx")
ws2 = wb2["Sheet1"]

for row in ws1.iter_rows(min_row=1, max_col=3):
    if row[1].value == None:
        pass
    else:
        provider = row[0].value
        description = row[1].value
        for cell in ws2.iter_rows(min_row=1, max_col=3):
            if cell[0].value.startswith(provider) and cell[1].value == description:
                cell[2].value = str("'" + cell[0].value + "',")
            else:
                pass

wb2.save("Azure-Actions.xlsx")

它记录新工作簿 c 列中的命中,但我还需要记录 Azure-Provider-description.xlsx 中与 Azure-Scrape中的任何内容不匹配的行 .xlsx - 我需要做什么?

提前致谢。

python excel azure openpyxl

评论

0赞 Timeless 11/14/2023
您的 I/O 不匹配!例如,第二个表中没有。此外,代码(您向我们展示的)不可能不保留与条件不匹配的行。请提供一个最小可重现示例,并确保两个表格/输入的格式为文本以便我们可以复制/粘贴)而不是图像Microsoft.Advisor/configuration/writews2
0赞 Dave 11/14/2023
这是我感兴趣的 wb1 的失误。
1赞 Timeless 11/14/2023
但是,您仍然没有以文本形式提供示例,并且没有显示完全匹配的预期输出。
1赞 moken 11/14/2023
因此,您似乎想在单元格值条件检查中填写代码的“通过”部分,但是@Timeless如所述,如果达到“通过”,您没有指出要做什么?您的“Azure-Actions:”屏幕截图显示匹配项、位置、内容、如何记录未命中?

答:

0赞 Timeless 11/14/2023 #1

假设你想有条件地将表与一个表进行内部连接,同时保留后者的非匹配项,你可以尝试这样做:2nd1st

from openpyxl import load_workbook, Workbook

wb1 = load_workbook("Azure-Provider-description.xlsx")
ws1 = wb1["Sheet1"]

wb2 = load_workbook("Azure-Scrape.xlsx")
ws2 = wb2["Sheet1"]

merges = []
for pro1, desc1 in ws1.values:
    for pro2, desc2 in ws2.values:
        if pro2.startswith(pro1) and desc1 == desc2:
            merges.append([pro2, desc1, f"'{desc2},"])
    else:
        merges.append([pro1, desc1]) # << maybe to be adjusted ?

wb3 = Workbook()
ws3 = wb3.active; ws3.title = "Sheet1"

for row in merges:
    ws3.append(row)

wb3.save("Azure-Actions.xlsx")