【问题标题】:How to delete specific rows in excel with openpyxl python if condition is met如果满足条件,如何使用openpyxl python删除excel中的特定行
【发布时间】:2020-11-18 14:55:18
【问题描述】:

我正在使用 openpyxl 创建 python 脚本,该脚本将遍历数据行并查找其中某些列为空的行 - 这些将被删除。行的范围是 3 到 1800。

我不太确定如何删除这些行 - 请参阅我到目前为止提出的代码。 我试图实现的是遍历行并检查第 4、7 列的值是否设置为无。如果为真,我想将行号返回到合适的集合中(需要建议哪个最适合这个),然后创建另一个循环删除特定的行号,因为我不想通过删除行来更改文件的结构数据。

我相信可能有更简单的功能可以做到这一点,但找不到这个特定的答案。

for i in worksheet.iter_rows(min_row=3, max_row=1800):
emp_id = i[4]
full_name = i[7]
if emp_id.value == None and full_name.value == None:
print(worksheet[i].rows)
rows_to_delete.append(i)

【问题讨论】:

  • 我会使用熊猫:pandas.read_excel(...).dropna(subset=['emp_id', 'full_name'], how='all').to_excel(...)

标签: python indexing conditional-statements rows openpyxl


【解决方案1】:

您的迭代看起来不错。

OpenPyXl 提供worksheet.delete_rows(idx, amt=1),其中idx 是要删除的第一行的索引(从1 开始),amt 是要删除该索引之外的行数。

所以worksheet.delete_rows(3, 4) 将删除第 3、4、5 和 6 行,worksheet.delete_rows(2, 1) 将只删除第 2 行。

在您的情况下,您可能想要执行类似worksheet.delete_rows(i, 1) 的操作。

【讨论】:

  • 请注意,当循环删除时会弄乱计数器,所以最好从下往上反转和删除。
  • @CharlieClark 对此我感激不尽。老实说,我整整两天都在搞砸我的头。你的评论刚刚救了我的命
猜你喜欢
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2015-10-13
  • 2013-03-23
  • 2020-09-11
  • 2021-12-26
相关资源
最近更新 更多