Python 读取 Excel 文件的 1 列
Python read 1 column of Excel file
我正在尝试使用 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()
但这会导致以下错误:
Traceback (most recent call last):
File "someProgram.py", line 27, in main()
File "someProgram.py", line 15, in main
if(sheet.cell(row+1,1).value == None):
File "C:\Python34\lib\openpyxl\worksheet\worksheet.py", line 349,
in cell coordinate = coordinate.upper().replace('$', '')
AttributeError: 'int' object has no attribute 'upper'
您可以使用迭代器,在这种情况下会更方便。
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)
我看到我可以使用相同的代码打印列中的所有值,但对下面的行稍作修改:(基本上,通过再添加一个 \
来转义“\”字符
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()
这一行有问题:
if(sheet.cell(row+1,1).value == None):
对于一个参数函数,sheet.cell
期望有一个 str
单元名称,例如 A1
而不是 int
类型。
您需要指定 row
和 column
键,例如:
sheet.cell(row=row+1, column=1).value
如果您指定 int
类型 row
和 column
变量
我自己创建了一个小的 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
希望这对您的问题有所帮助。
我正在尝试使用 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()
但这会导致以下错误:
Traceback (most recent call last):
File "someProgram.py", line 27, in main() File "someProgram.py", line 15, in main
if(sheet.cell(row+1,1).value == None):
File "C:\Python34\lib\openpyxl\worksheet\worksheet.py", line 349,
in cell coordinate = coordinate.upper().replace('$', '')
AttributeError: 'int' object has no attribute 'upper'
您可以使用迭代器,在这种情况下会更方便。
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)
我看到我可以使用相同的代码打印列中的所有值,但对下面的行稍作修改:(基本上,通过再添加一个 \
来转义“\”字符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()
这一行有问题:
if(sheet.cell(row+1,1).value == None):
对于一个参数函数,sheet.cell
期望有一个 str
单元名称,例如 A1
而不是 int
类型。
您需要指定 row
和 column
键,例如:
sheet.cell(row=row+1, column=1).value
如果您指定 int
类型 row
和 column
变量
我自己创建了一个小的 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
希望这对您的问题有所帮助。