【问题标题】:Iterating Rows for Different Columns with Python and Openpyxl使用 Python 和 Openpyxl 迭代不同列的行
【发布时间】:2018-05-25 20:33:42
【问题描述】:

我正在尝试使用 openpyxl 遍历 Excel 电子表格中的行。 我要做的是检查当前行的 A 列中的单元格是否为空,如果是,我需要在同一行上打印 B 列中的数据。 到目前为止,这是我的代码:

wb = openpyxl.load_workbook('worksheet.xlsx')
wb.active = 1 #Change the active sheet.
sheets = wb.sheetnames #The sheets.
currentSheet = wb[sheets[n]] #Chooses the current sheet from the workbook.

for row in currentSheet.iter_rows('A{}:A{}'.format(currentSheet.min_row, currentSheet.max_row)):
    for cell in row:
        if not cell.value:
            print(currentSheet['B''row'].value)

当我运行它时,我得到以下输出:

  File "main.py", line 69, in get_callout
    print(currentSheet['B''row'].value)
  File "C:\Users\~\AppData\Local\Continuum\anaconda3\lib\site-packages\ope
pyxl\worksheet\worksheet.py", line 357, in __getitem__
    min_col, min_row, max_col, max_row = range_boundaries(key)
  File "C:\Users\~\AppData\Local\Continuum\anaconda3\lib\site-packages\ope
pyxl\utils\cell.py", line 135, in range_boundaries
    raise ValueError("{0} is not a valid coordinate or range")
ValueError: {0} is not a valid coordinate or range

任何帮助将不胜感激!

编辑 我忘了提到我也在使用 openpyxl 2.4.9,因为 2.5.3(当前版本)不会让我打开我需要使用的 Excel 工作簿。

【问题讨论】:

  • 'row' 应该是row 变量吗?并与字符串 'B' 连接,例如 'B'+row ?
  • 如果您在 print 语句中谈论“行”,那么是的,那就是 row 变量。我刚刚尝试通过 print(currentSheet['B'+row].value) 将其连接起来,但这也不起作用,但我认为你走在正确的轨道上。
  • print("{}{}".format('B', row))
  • 这样做会打印出以下内容:B(<Cell 'SHEET 1'.A1>,) 每一行。

标签: python excel loops openpyxl worksheet


【解决方案1】:

这是一个应该使用 Excel 表示法的示例。

for (a, b) in currentSheet.iter_rows(max_col=2):
   if a.value is None:
       print(b.value)

应该工作

【讨论】:

  • 您好查理,感谢您的回复!我收到以下错误:Traceback (most recent call last): File "main.py", line 71, in get_callout for (a, b) in currentSheet(max_col=2): TypeError: 'Worksheet' object is not callable
  • 另外我现在正在尝试读取 L 列是否为空而不是 A 列,但我猜这不会改变很多代码。
【解决方案2】:

其实我想出了一个不同的方法!

这是我的代码,供将来可能偶然发现此问题的任何人使用:

    for r in range(1, currentSheet.max_row):
        cell = currentSheet.cell(row=r, column=12)
        if cell.value is None:
            data = currentSheet.cell(row=r, column=2)
            print(data.value)

基本上我所做的是检查 L (12) 列是否为空,如果是,我需要在同一行但在 B (2) 列中打印值。打印显然可以用其他任何东西(return 或其他东西)来改变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-25
    • 2018-04-19
    • 2023-01-23
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多