【问题标题】:Python read 1 column of Excel filePython读取1列Excel文件
【发布时间】:2018-08-28 23:09:17
【问题描述】:

我正在尝试使用openpyxl 从 Excel 文件中读取 1 列,直到它碰到一个空单元格,然后它需要停止。但我不让它工作。到目前为止,这是我的代码:

import openpyxl
import os

def main():
    filePath = os.getcwd() + "\file.xlsx"

    wb = openpyxl.load_workbook(filename=filePath, read_only=True)
    sheet = wb["Sheet1"]


    for row in range(sheet.max_row):
        if(sheet.cell(row+1,1).value == None):
            break
        print(sheet.cell(row+1,1).value)


if __name__ == "__main__":
    main()

但这会导致以下错误:

回溯(最近一次通话最后一次):
文件“someProgram.py”,第 27 行,在 main() 文件“someProgram.py”,第 15 行,在 main
if(sheet.cell(row+1,1).value == None):
文件“C:\Python34\lib\openpyxl\worksheet\worksheet.py”,第 349 行,
在单元格坐标 = coordinate.upper().replace('$', '')
AttributeError: 'int' 对象没有属性 'upper'

【问题讨论】:

  • 为什么不用熊猫?
  • 什么是熊猫??
  • 这是一个库,您可以在其中操作包括 excel 在内的无数数据格式。
  • 谢谢,我去试试
  • 错误指向我使用的openpyxl库,所以我认为我使用它错误,但我不知道是什么问题。

标签: python excel python-3.x openpyxl attributeerror


【解决方案1】:

我自己创建了一个小的 xlsx 文件,其中只有一列按以下顺序填充整数:5、4、3、2、10 和 11。下面的代码似乎至少对我有用:

column_index = 0 # 0 = A, 1 = B, ...
sheet_name = "Sheet1"
sheet = wb[sheet_name]

for r in sheet.rows:
    value = r[column_index].value
    print("value",value)
    if value is None:
        break

输出:

value 5
value 4
value 3
value 2
value 10
value 11

如果我删除该列中的一个中间值,例如 2,则循环停止,如下所示:

value 5
value 4
value 3
value None

我希望这对您的问题有所帮助。

【讨论】:

    【解决方案2】:

    我发现我可以使用相同的代码打印列中的所有值,但对下面的行稍作修改:(基本上,通过再添加一个 \

    来转义“\”字符
    import openpyxl
    import os
    
    def main():
        filePath = os.getcwd() + "\\file.xlsx"
        print(filePath)
        print(os.getcwd)
        wb = openpyxl.load_workbook(filename=filePath, read_only=True)
        sheet = wb["Sheet1"]
        for row in range(sheet.max_row):
            if(sheet.cell(row+1,1).value == None):
                break
            print(sheet.cell(row+1,1).value)
    if __name__ == "__main__":
        main()
    

    【讨论】:

      【解决方案3】:

      问题出在这一行:

      if(sheet.cell(row+1,1).value == None):
      

      sheet.cell 期望有一个 str 单元格名称,例如 A1,而不是 int 类型的一个参数函数。

      您需要指定rowcolumn 键,例如:

      sheet.cell(row=row+1, column=1).value
      

      如果您指定 int 类型 rowcolumn 变量

      【讨论】:

      • 谢谢!我已将其更改为heet.cell(row=row+1, column=1).value == ""),现在可以使用了!
      【解决方案4】:

      您可以使用在这种情况下更方便的迭代器。

      wb = load_workbook(pathToYourFile, use_iterators=True)
      sheet = wb.worksheets["Sheet1"]
      row_count = sheet.max_row
      for row in range(sheet.max_row):
              if(sheet.cell(row+1,1).value == None):
                  break
              print(sheet.cell(row+1,1).value)
      

      【讨论】:

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