openpyxl TypeError: string indices must be integers

openpyxl TypeError: string indices must be integers

import openpyxl, os 

cwd = os.getcwd()
print(cwd)

wb = openpyxl.load_workbook('Hello.xlsx')
print (type(wb))

sheetNames = wb.sheetnames
print(sheetNames[1])

sheet0 = sheetNames[0]
print (sheet0['A1']) <--TypeError: string indices must be integers

我也试过在最后使用 .value。该单元格中包含数字 55。我是 python 的新手,所以请帮忙。此外,如果有人在 excel 和 python 上有合适的资源位置,那将很有帮助。 openpyxl 似乎是最新的,所以我正在尝试使用它,但文档很差。

sheetname0 是第一个 sheet 的名称。因此,当您 运行 sheetname0['A1'] 时,您正在做的是尝试访问字符串的元素 A1 - 这是没有意义的。如果您希望访问 sheet 的单元格 A1,您必须首先访问 sheet 对象。

ws = wb[sheetNames[0]]

现在您有了 sheet,您可以访问单元格:

print(ws['A1'])

也是 Python 的一般提示,考虑到您说您是新手,通常建议您使用 snake_case 作为变量名。

您收到错误 TypeError: string indices must be integers,因为 sheet0 实际上是一个字符串(不是作品 sheet 本身)。

wb.sheetnames 为您提供所有作品的列表sheet,例如

['Sheet 1', 'Sheet 2', 'Sheet 3']

所以 sheetNames[0] 会给你第一个 sheet 名字 Sheet 1 作为字符串。

要使用数据,您需要首先使用所需的 sheet 名称打开作品sheet。

您还可以使用 wb.active 获取第一个工作 sheet 对象,即 Sheet 1 以避免需要使用 wb.sheetnames:

import openpyxl

wb = openpyxl.load_workbook('Hello.xlsx')
ws = wb.active
print(ws['A1'].value)

要获得相应的工作sheet对象,您将使用:

ws = wb[wb.sheetnames[0]]
print(ws['A1'].value)