Python读取1列Excel文件

时间:2018-03-20 08:05:56

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

我尝试使用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行,在主要文件中   if(sheet.cell(row + 1,1).value == None):
  文件" C:\ Python34 \ lib \ openpyxl \ worksheet \ worksheet.py",第349行,
  in cell coordinate = coordinate.upper()。replace(' $','')
  AttributeError:' int'对象没有属性' upper'

4 个答案:

答案 0 :(得分: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变量

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我自己创建了一个小的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

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

答案 3 :(得分:-1)

你可以使用一个迭代器,在这种情况下会很方便。

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)