删除空行-openpyxl

DJG*_*paJ 5 python excel openpyxl

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

我已经多次阅读了openpyxl文档,并仔细研究这里这里提出的问题,甚至是这本在线书中的章节,但这些都没有真正回答我正在尝试做的事情。

这是我现在拥有的代码:

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

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

TypeError:“ NoneType”对象不可调用

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

谢谢

小智 8

可能对某人来说下一个代码会很有用:

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))
Run Code Online (Sandbox Code Playgroud)


ber*_*nie 7

据我所知 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()
Run Code Online (Sandbox Code Playgroud)