删除空行 \- openpyxl

新手上路,请多包涵

在花了最后几个小时试图找到一种方法来做到这一点之后,我决定只问一下。

我已经多次浏览 openpyxl 文档,并浏览了 此处此处 提出的问题,甚至是 这本在线书籍 中的章节,但没有一个能真正回答我试图做的事情。

这是我现在拥有的代码:

 for row in ws.iter_rows():
    i = 1
    if row[i].internal_value() == None:
        ws.Rows(i).Delete()
    else:
        i + 1

我已经尝试了很多不同的东西,现在我遇到了一个错误:

TypeError: ‘NoneType’ 对象不可调用

我做错了什么,我该如何解决它以便我遍历所有行并删除任何完全为空的行,或者(如果它更容易实现)有一个空的第一个单元格?

谢谢

原文由 DJGrandpaJ 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 804
2 个回答

据我所知,openpyxl 没有提供删除行的方法。您可以改用 COM ,例如:

 import win32com.client

filename = 'c:/my_file.xlsx'
sheetname = 'Sheet1'
xl = win32com.client.DispatchEx('Excel.Application')
wb = xl.Workbooks.Open(Filename=filename)
ws = wb.Sheets(sheetname)

begrow = 1
endrow = ws.UsedRange.Rows.Count
for row in range(begrow,endrow+1): # just an example
  if ws.Range('A{}'.format(row)).Value is None:
    ws.Range('A{}'.format(row)).EntireRow.Delete(Shift=-4162) # shift up

wb.Save()
wb.Close()
xl.Quit()

原文由 mechanical_meat 发布,翻译遵循 CC BY-SA 3.0 许可协议

下一个代码可能对某人有用:

 index_row = []

# loop each row in column A
for i in range(1, ws.max_row):
    # define emptiness of cell
    if ws.cell(i, 1).value is None:
        # collect indexes of rows
        index_row.append(i)

# loop each index value
for row_del in range(len(index_row)):
    ws.delete_rows(idx=index_row[row_del], amount=1)
    # exclude offset of rows through each iteration
    index_row = list(map(lambda k: k - 1, index_row))

原文由 Oleksandr Shevelskyi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题