首页 文章

Python读取1列Excel文件

提问于
浏览
1

我正在尝试使用 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(第1,1行).value ==无):文件“C:\ Python34 \ lib \ openpyxl \ worksheet \ worksheet.py”,第349行,单元格坐标= coordinate.upper() . replace('$','')AttributeError:'int'对象有没有属性'上'

4 回答

  • -1

    问题出在这一行:

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

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

    您需要指定 rowcolumn 键,例如:

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

    如果指定 int 类型 rowcolumn 变量

  • 0

    我看到我能够使用相同的代码打印列中的所有值,但稍微修改到下面的行:(基本上,通过添加一个\来转义''字符

    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()
    
  • 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
    

    我希望这有助于解决您的问题 .

  • 0

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

    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)
    

相关问题