让我先说一下,我已经尝试过寻找,但似乎找不到类似的情况,所以如果您觉得熟悉,请不要太沮丧。我正在使用 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']
然后导致以下错误:
文件“C:\ Python27 \ lib \ openpyxl \ workbook.workbook.py”, getitem 中的第233行 raise KeyError(“工作表{0}不存在。”。format(key))
KeyError:'工作表工作表范围名称不存在'
所以我认为这与不导入整个openpyxl模块有关。我继续这样做并运行整个过程但是它导致了同样的错误。
有人可以让我知道我做错了什么/如何解决这个问题?
其他信息:
之前我已成功写入空文件,然后读取值。这给了我正确的价值,除了我通过Excel手动编写的内容 - 手动输入的单元格返回None或Nonetype。问题似乎是手动输入的细胞。
我确实在访问文件之前点击了文件,不用担心
这是在同一个目录中所以我知道这不是位置问题。
答案 0 :(得分:7)
以下命令没有意义:
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()
答案 1 :(得分:2)
我不确定你需要做什么,但是要将Excel电子表格读入python,我通常使用xlrd(这对我来说更容易使用)。见例:
import xlrd
workbook = xlrd.open_workbook(in_fname)
worksheet = workbook.sheet_by_index(0)
要写入Excel电子表格,我使用xlsxwriter:
import xlsxwriter
workbook = xlsxwriter.Workbook(out_fname)
worksheet = workbook.add_worksheet('spreadsheet_name')
希望这有帮助。