Python &引用;“工作表范围名称不存在”;openpyxl中的键错误
让我先说一句,我已经试过寻找了,但似乎找不到类似的情况,所以如果你觉得这很熟悉,请不要太难过。我使用的是Python 2.7和openpyxl 2.2.5版(我需要使用2.7,并且出于其他原因使用了较旧的模块。) 我是Python新手,一般都是读/写代码的,所以在实现它之前,我会在命令行上进行测试: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
foo.xlsx
,其中包含一些我通过Excel手动输入的值from openpyxl import load_workbook
wb = load_workbook('foo.xlsx')
sheet_ranges = wb['range names']
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]](不带句点)中有一个输入错误。但是非常有用。非常感谢。