【问题标题】:How to copy data from one sheet to another while skipping empty cells - Python and Openpyxl如何在跳过空单元格时将数据从一张表复制到另一张表 - Python 和 Openpyxl
【发布时间】:2020-01-06 19:31:09
【问题描述】:

我正在使用 python 来格式化 Excel 电子表格。我需要从 Sheet #1“Main”中的 L 列复制数据,并将其粘贴到 Sheet #2 “Data”中的 A 列中。我已经完成了这项工作,但我也想跳过空单元格,这些单元格在 Sheet #1 中随机出现,在这里我遇到了介绍问题。

我试过了:

for i in range(2, 50):
    for j in range(12, 13):
        if cell.value != None:
            data.cell(row=i, column=j-11).value = main.cell(row=i, column=j).value

但是我收到错误消息“NameError: name 'value' is not defined”

有什么想法吗?

【问题讨论】:

  • 不确定这是不是答案,但是否在此循环之前定义了单元格?它实际上应该是 if 语句中的 main.cell 吗? (即如果 main.cell(i,j).value != None)?
  • 这样就去掉了错误信息!但是空白单元格仍然出现在工作表 #2 中。我认为它将数据复制到相同编号的行而不是下一个空白行。嗯……
  • 嗨,凯特,我从来没有使用过 Openpxl,但我想知道在你的最后一行中,你是否真的希望它说:data.cell(row=i+1, column=j-11 )...
  • 刚刚开始工作:for i in range(2, 50): for j in range(12, 13): if main.cell(i,j).value != None: data .cell(data.max_row+1, column=j-11).value = main.cell(row=i, column=j).value
  • 请分享所有相关代码和数据。见:minimal reproducible example。顺便说一句,您应该使用is 来检查变量是否为None,而不是==

标签: python excel openpyxl


【解决方案1】:

这是我们开始工作的代码(来回参见 cmets):

import os
import openpyxl

wb = openpyxl.load_workbook('/Users/path/.xlsx')
main = wb['Sheet1']
wb.create_sheet(title='Formatted Data')
data = wb['Formatted Data']

for i in range(2, 50):
    for j in range(12, 13):
        if main.cell(i,j).value != None:
            data.cell(data.max_row+1, column=j-11).value = main.cell(row=i, column=j).value

【讨论】:

    【解决方案2】:

    您应该尽可能避免使用自己的计数器,让 openpyxl 为您完成工作。对于新工作表,这非常容易。

    empty_row = [None] * 11
    for row in main.iter_rows(min_col=12, max_col=2, min_row=2, values_only=True):
        if row[0] != None:
             data.append(empty_row + row]
    

    【讨论】:

      猜你喜欢
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      相关资源
      最近更新 更多