【问题标题】:openpyxl TypeError: string indices must be integersopenpyxl TypeError:字符串索引必须是整数
【发布时间】:2018-08-19 03:56:54
【问题描述】:
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 似乎是最新的,所以我正在尝试使用它,但文档很差。

【问题讨论】:

  • 我在 Matlab 中编程了一段时间,正在尝试过渡到 python
  • sheet0 是一个字符串,你必须使用整数来访问它的字符元素。例如sheet0[3]
  • wb.sheetnames 返回字符串列表,您可能需要其他方法

标签: python typeerror openpyxl


【解决方案1】:

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

ws = wb[sheetNames[0]]

现在您有了可以访问单元格的工作表:

print(ws['A1'])

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

【讨论】:

  • 感谢您对snake_case的回复和建议。
【解决方案2】:

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

wb.sheetnames 为您提供所有工作表名称的列表,例如

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

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

要处理数据,您需要先使用所需的工作表名称打开工作表。

您也可以使用wb.active 来获取第一个工作表对象,即Sheet 1,以避免使用wb.sheetnames

import openpyxl

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

要获取您将使用的相应工作表对象:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-28
    • 2021-04-28
    • 2020-06-24
    • 2016-03-26
    • 2017-09-07
    • 2016-02-17
    • 2023-03-03
    相关资源
    最近更新 更多