Python openpyxl load_workbook错误:TypeError(NoneType not Iterable)和ValueError(Max.Value为180)

时间:2014-09-22 21:30:54

标签: python windows excel

所以我在Windows XP笔记本电脑上安装了Python 3.4.1。我得到了openpyxl软件包(现在不记得哪个版本,我认为是2.1)。我正在努力工作,编写自定义代码以根据需要修改Excel文档。

然后我格式化了我的笔记本电脑(出于工作原因)并安装了Windows 7.我再次掌握了Python 3.4.1。我点了安装openpyxl(" pip install openpyxl"在我的命令提示符下) - 这次肯定是版本2.1。然后我尝试打开一些早期的工作簿。

这是在IDLE GUI界面中 - 而不是在脚本或任何内容中。我刚刚输入(正确导入openpyxl-> load_workbook后):

WB = load_workbook(' Filename.xlsx&#39)

现在我得到错误。此文件是由Excel 2007创建的(在我的格式化笔记本电脑和安装Windows 7之前在Windows XP中创建),我以前能够在早期的Windows XP配置中使用我的openpyxl软件包打开。在尝试使用openpyxl打开之前,我还尝试在MS Excel(Windows 7)中重新打开Excel文件并重新保存。我以前的Windows XP和新的Windows 7都是32位(任何地方都没有64位)。

我得到的错误(取决于我尝试打开的文件)是:

第1号文件的错误:

Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
wb=load_workbook('Filename.xlsx')
File "C:\Python34\lib\site-packages\openpyxl\reader\excel.py", line 151, in load_workbook
_load_workbook(wb, archive, filename, read_only, keep_vba)
File "C:\Python34\lib\site-packages\openpyxl\reader\excel.py", line 244, in _load_workbook
wb._external_links = list(detect_external_links(rels, archive))
File "C:\Python34\lib\site-packages\openpyxl\workbook\names\external.py", line 100, in detect_external_links
Book.links = list(parse_ranges(range_xml))
File "C:\Python34\lib\site-packages\openpyxl\workbook\names\external.py", line 85, in parse_ranges
for n in safe_iterator(names, '{%s}definedName' % SHEET_MAIN_NS):
TypeError: 'NoneType' object is not iterable

第2号错误:

Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
wb=load_workbook('Filename.xlsx')
File "C:\Python34\lib\site-packages\openpyxl\reader\excel.py", line 151, in load_workbook
_load_workbook(wb, archive, filename, read_only, keep_vba)
File "C:\Python34\lib\site-packages\openpyxl\reader\excel.py", line 205, in _load_workbook
style_table, color_index, cond_styles = read_style_table(archive.read(ARC_STYLE))
File "C:\Python34\lib\site-packages\openpyxl\reader\style.py", line 215, in read_style_table
p.parse()
File "C:\Python34\lib\site-packages\openpyxl\reader\style.py", line 44, in parse
self.parse_cell_xfs()
File "C:\Python34\lib\site-packages\openpyxl\reader\style.py", line 191, in parse_cell_xfs
_style['alignment'] = Alignment(**alignment)
File "C:\Python34\lib\site-packages\openpyxl\styles\alignment.py", line 54, in __init__
self.textRotation = textRotation
File "C:\Python34\lib\site-packages\openpyxl\styles\hashable.py", line 54, in __setattr__
return object.__setattr__(self, *args, **kwargs)
File "C:\Python34\lib\site-packages\openpyxl\descriptors\__init__.py", line 89, in __set__
super(Min, self).__set__(instance, value)
File "C:\Python34\lib\site-packages\openpyxl\descriptors\__init__.py", line 68, in __set__
raise ValueError('Max value is <0>'.format(self.max))
ValueError: Max value is 180

对于第二种情况,我转到__init__.py文件并添加了一行来打印生成的值。结果是255,这是> 180(因此错误)。我不知道这个值代表什么 - 文档中的独特样式的数量或什么?

openpyxl是否存在任何依赖关系?我已经使用Service Pack 1正确安装了Excel(现在在Windows 7中)。我还尝试卸载Python 3.4.1和openpyxl并重新安装三到四次。

这可能是什么问题?

提前感谢您的任何答案。

2 个答案:

答案 0 :(得分:2)

要解决NoneType错误,请清除excel中数据的格式,然后可以加载excel。

答案 1 :(得分:0)

对于第二个,你将self.textRotation设置为255.这就是max = 180(度)的来源。在alignment.py中,textRoation的最小值/最大值为0-180。这个限制在2.1中添加。 (我发现这个限制可疑,因为有360度。)

编辑:从更一般的意义上说,你只是想读取一个excel文件。所以,这些都可能是错误。