Python &引用;“工作表范围名称不存在”;openpyxl中的键错误

Python &引用;“工作表范围名称不存在”;openpyxl中的键错误,python,python-2.7,openpyxl,Python,Python 2.7,Openpyxl,让我先说一句,我已经试过寻找了,但似乎找不到类似的情况,所以如果你觉得这很熟悉,请不要太难过。我使用的是Python 2.7和openpyxl 2.2.5版(我需要使用2.7,并且出于其他原因使用了较旧的模块。) 我是Python新手,一般都是读/写代码的,所以在实现它之前,我会在命令行上进行测试: 我在Python27文件目录中创建了一个文件,foo.xlsx,其中包含一些我通过Excel手动输入的值 然后,我在Python命令行上使用了这个简单的代码来测试我的代码 from openpyxl

让我先说一句,我已经试过寻找了,但似乎找不到类似的情况,所以如果你觉得这很熟悉,请不要太难过。我使用的是Python 2.7openpyxl 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 raise KeyError(“工作表{0}不存在。”.format(键))
    KeyError:“工作表范围名称不存在”

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

    有人能告诉我我做错了什么/如何解决这个问题吗

    其他信息:

    • 我以前成功地写入了一个空文件,然后读取了值。这为我提供了所有正确的值,除了我通过Excel手动编写的内容——手动输入的单元格返回None或Nonetype。问题似乎在于手动输入的单元格

    • 在访问文件之前,我确实点击了“保存”按钮。别担心


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

    我不确定您需要做什么,但要将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')
    

    希望这有帮助。

    以下命令没有意义:

    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()
    

    我应该放弃openpyxl吗?我一直在读openpyxl是操作xlsx文件的最佳模块。这会读取手动输入到电子表格中的数据吗?xlrd和xlsxwriter都是很好的库,但openpyxl是目前唯一允许您编辑XLSX文件的Python库。嗨,Martin,ws=wb。get_sheet_by_name(sheets[0])返回相同的错误。我编写的代码也做了同样的事情,只是我知道工作表的名称,因此它将工作表指定为范围名称。它说工作表Sheet1不存在
    ws=wb.active
    是处理现有工作表的常用方法,您尝试过吗?对于阅读此答案的任何人:“ws=wb.active”使用手动在工作表中输入的数据,另一种方法(推荐)返回手动输入的非类型。我建议不要使用
    wb.get\u named\u ranges()
    ,因为它本质上是一个内部函数。感谢Martin的帮助。R.Joseph发布的原始代码来自openpyxl教程,这很奇怪:。注意:我认为您的示例ws=wb。[sheets[0]]应该是ws=wb[sheets[0]](不带句点)中有一个输入错误。但是非常有用。非常感谢。