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)
据我所知 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)