让我先说一下,我已经尝试过寻找,但似乎找不到类似的情况,所以如果您对此感到熟悉,请不要太烦恼.我使用的是Python 2.7和openpyxl 2.2.5版本(我需要使用2.7,并且出于其他原因使用了较旧的模块.)
我是Python的新手,一般都是读/写代码,所以我在实现它之前在命令行上测试它:
>我在Python27文件目录中创建了一个文件foo.xlsx,其中包含一些我通过Excel手动输入的值.
>然后我在Python命令行上使用这个简单的代码来测试我的代码
from openpyxl import load_workbook
wb = load_workbook('foo.xlsx')
sheet_ranges = wb['range names']
然后导致以下错误:
File “C:\Python27\lib\openpyxl\workbook.workbook.py”, line 233 in getitem
raise KeyError(“Worksheet {0} does not exist.”.format(key))
KeyError: ‘Worksheet sheet range names does not exist’
所以我认为这与不导入整个openpyxl模块有关.我继续这样做并运行整个过程,但它导致了同样的错误.
有人可以让我知道我做错了什么/如何解决这个问题?
附加信息:
>我之前已成功写入空文件,然后读取值.这给了我正确的价值,除了我通过Excel手动编写的内容 – 手动输入的单元格返回None或Nonetype.问题似乎是手动输入的细胞.
>我确实在访问它之前点击了保存文件,不用担心
这是在同一目录中,所以我知道这不是一个位置问题.
解决方法:
以下命令没有意义:
sheet_ranges = wb['range names']
通常,您打开一个工作簿,然后访问其中一个工作表,下面给出了一些如何完成此操作的示例:
import openpyxl
wb = openpyxl.Workbook()
wb = openpyxl.load_workbook(filename = 'input.xlsx')
# To display all of the available worksheet names
sheets = wb.sheetnames
print sheets
# To work with the first sheet (by name)
ws = wb[sheets[0]]
print ws['A1'].value
# To work with the active sheet
ws = wb.active
print ws['A1'].value
# To work with the active sheet (alternative method)
ws = wb.get_active_sheet()
print ws['A1'].value
如果要在工作簿中显示任何命名范围,可以执行以下操作:
print wb.get_named_ranges()