使用Python和Openpyxl迭代不同列的行

时间:2018-05-25 20:33:42

标签: python excel loops openpyxl worksheet

我尝试使用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工作簿。

2 个答案:

答案 0 :(得分:0)

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

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

应该工作

答案 1 :(得分:-1)

我实际上想出了一种不同的做法!

以下是我未来可能偶然发现的任何人的代码:

    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)列中打印该值。显然,印刷可以用其他任何东西改变(返回或其他东西)。