“工作表范围名称不存在”openpyxl中的KeyError

时间:2016-02-29 06:19:30

标签: python python-2.7 openpyxl

让我先说一下,我已经尝试过寻找,但似乎找不到类似的情况,所以如果您觉得熟悉,请不要太沮丧。我正在使用 Python 2.7 openpyxl版本2.2.5 (我需要使用2.7,并且出于其他原因使用了较旧的模块。)

我是Python的新手,一般都是读/写代码,所以我在实现它之前在命令行上测试它:

  1. 我在Python27文件目录中创建了一个文件foo.xlsx,其中包含一些我通过Excel手动输入的值。

  2. 然后我在Python命令行上使用这个简单的代码来测试我的代码

    from openpyxl import load_workbook
    wb = load_workbook('foo.xlsx')
    sheet_ranges = wb['range names']
    
  3. 然后导致以下错误:

      

    文件“C:\ Python27 \ lib \ openpyxl \ workbook.workbook.py”, getitem 中的第233行           raise KeyError(“工作表{0}不存在。”。format(key))
      KeyError:'工作表工作表范围名称不存在'

    所以我认为这与不导入整个openpyxl模块有关。我继续这样做并运行整个过程但是它导致了同样的错误。

    有人可以让我知道我做错了什么/如何解决这个问题?

    其他信息:

    • 之前我已成功写入空文件,然后读取值。这给了我正确的价值,除了我通过Excel手动编写的内容 - 手动输入的单元格返回None或Nonetype。问题似乎是手动输入的细胞。

    • 我确实在访问文件之前点击了文件,不用担心

    这是在同一个目录中所以我知道这不是位置问题。

2 个答案:

答案 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')

希望这有帮助。