首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果Openpyxl中的整行为空,则将单元格上移

如果Openpyxl中的整行为空,则将单元格上移
EN

Stack Overflow用户
提问于 2018-05-31 15:30:03
回答 2查看 1.7K关注 0票数 1

如果整行中没有值,我希望删除整行(将单元格上移)。我使用的是Openpyxl。

我的代码:

代码语言:javascript
运行
复制
for row in range(1, ws1.max_row):
  flag = 0
  for col in range(1, 50):
    if ws1.cell(row, col).value is not None:
      flag = 1

  if flag == 0:
    ws1.delete_rows(row, 1)

在上面的情况下,行不会被删除。

我试着使用iter_rows函数来做同样的事情,它给了我:

TypeError: '>' not supported between instances of 'tuple' and 'int'

代码语言:javascript
运行
复制
for row in ws1.iter_rows(min_row = 1, max_col=50, max_row = ws1.max_row):
  flag = 0
  for cell in row:
    if cell.value is not None:
      flag = 1

  if flag == 0:
    ws1.delete_rows(row, 1)

感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 18:20:04

以下是查找然后删除空行的一般方法。

代码语言:javascript
运行
复制
empty_rows = []
for idx, row in enumerate(ws.iter_rows(max_col=50), start=1):

  empty = not any((cell.value for cell in row))

  if empty:
    empty_rows.append(idx)

for row_idx in reversed(empty_rows):
  ws.delete_rows(row_idx, 1)
票数 0
EN

Stack Overflow用户

发布于 2018-05-31 16:26:33

感谢查理克拉克的帮助,这是我想出的一个有效的解决方案,如果我可以对其进行任何改进,请告诉我:

代码语言:javascript
运行
复制
i = 1
emptyRows = []
for row in ws1.iter_rows(min_row = 1, max_col=50, max_row = ws1.max_row):
  flag = 0
  for cell in row:
    if cell.value is not None:
      flag = 1

  if flag == 0:
    emptyRows.append(i)

  i += 1

for x in emptyRows:
  ws1.delete_rows(x, 1)
  emptyRows[:] = [y - 1 for y in emptyRows]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50618962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档