Openpyxl 比较单元格

我有 2 张带有一些数据的工作表(每张 18k 行),需要检查 source.xlsx 中的值是否存在于 target.xlsx 文件中。源文件中的行应该是唯一的。如果源文件中的单元格存在于目标文件中(在特定列中),则在目标文件的下一列中需要填充源文件中某列的值。这非常棘手,因此示例如下所示:


目标.xlsx


<table><tbody><tr><th>Data</th><th>price</th><th> </th></tr><tr><td>1234grt   </td><td> </td><td> </td></tr><tr><td>7686tyug  </td><td> </td><td> </td></tr><tr><td>9797tyu   </td><td>   </td><td> </td></tr><tr><td>9866yyy   </td><td> </td><td> </td></tr><tr><td>98845r  </td><td> </td><td> </td></tr><tr><td>4567yut  </td><td> </td><td> </td></tr><tr><td>1234grt</td><td> </td><td> </td></tr><tr><td>98845r </td><td> </td><td> </td></tr></tbody></table>

源文件.xls


<table><tbody><tr><th>Data</th><th>price</th><th> </th></tr><tr><td>98845r    </td><td>$50</td><td> </td></tr><tr><td>7686tyug  </td><td>$67</td><td> </td></tr><tr><td>9797tyu   </td><td>$56</td><td> </td></tr><tr><td>4567yut   </td><td>$67</td><td> </td></tr><tr><td>9866yyy   </td><td>$76</td><td> </td></tr><tr><td>98845r    </td><td>$56</td><td> </td></tr><tr><td>1234grt</td><td>$34</td><td> </td></tr></tbody></table>

for i in range(1, source_sheet_max_rows, 1):

print(i)

if source_wb[temp_sheet_name].cell(row=i, column=1).value in target_values:

    for j in range(1, target_sheet_max_rows, 1):

        if target_wb[temp_sheet_name].cell(row=j, column=1).value == source_wb[temp_sheet_name].cell(row=i,

                                                                                                           column=1).value:

            target_wb[temp_sheet_name].cell(row=j, column=2).value = source_wb[temp_sheet_name].cell(row=i,

                                                                                                             column=2).value

            target_wb.save(str(temp_sheet_name))

target_values - 包含目标表中第 1 列的值


上面的代码有效,但很重,我认为有一些更好的方法。这些文件包含超过 18k 行,因此比较数据需要很长时间。棘手的部分是我需要知道源文件中的单元格在目标文件中的哪一行用相应的值填充列。我正在使用 openpyxl,但如果更容易,我可以使用 Pandas。


函数式编程
浏览 218回答 2
2回答

慕容3067478

根据我对您的问题的理解,似乎目标文件中的行与源文件的特定顺序不同。for i in range(1, souce_sheet_max_rows):&nbsp; &nbsp; for j in range(1, target_sheet_max_rows):&nbsp; &nbsp; &nbsp; &nbsp; if target_wb[temp_sheet_name].cell(row=j, column=1).value == source_wb[temp_sheet_name].cell(row=i, column=1).value:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; target_wb[temp_sheet_name].cell(row=j, column=2).value == source_wb[temp_sheet_name].cell(row=i, column=2).value&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; breaktarget_wb.save(temp_sheet_name)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python