2014-09-22 775 views
0

因此,我在Windows XP笔记本电脑上安装了Python 3.4.1。我得到了openpyxl软件包(现在不记得是哪个版本,我认为2.1),并且我很好地编写了自定义代码,以根据需要在我的工作场所修改Excel文档。python openpyxl load_workbook错误:TypeError(NoneType not Iterable)和ValueError(Max。Value is 180)

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

这是在空闲的GUI界面 - 不是在脚本或任何东西。我刚才输入(后正确导入openpyxl-> load_workbook):

WB = load_workbook( 'Filename.xlsx')

现在我得到的错误。此文件是由Excel 2007(在Windows XP中创建的,在格式化我的笔记本电脑并安装Windows 7之前创建的)创建的,我以前可以在早期的Windows XP配置中使用我的openpyxl软件包打开它。我还尝试在MS Excel(Windows 7)中重新打开Excel文件并重新放置,然后尝试用openpyxl打开。我以前的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 

ERROR文件第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有没有依赖关系?我已经正确安装了Excel(现在在Windows 7中),带有Service Pack 1.我也尝试卸载Python 3.4.1和openpyxl并重新安装,三次或四次。

这里有什么问题?

在此先感谢您的任何答案。

回答

0

对于第二个,您将self.textRotation设置为255.这就是max = 180(度)来自的地方。在alignment.py中,textRoation的最小/最大值为0-180。 2.1中增加了这个限制。 (我觉得这个限制可疑,因为有360度。)

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

+0

好吧,看起来像textRotation的min/max是好的,但Excel正在重复使用该字段的不同风格。如果你创建了一本书,选择一个单元格,格式化单元格,进入对齐方式,在方向中单击垂直的“文本”(将它变成白色)然后保存,结果文件不能在openpyxl中打开,给出同样的错误锯。 – user3757614 2014-09-22 22:47:50

+0

创建了一个错误报告。 – user3757614 2014-09-22 23:01:01

+0

这可能是方向。我会给你一个镜头。同时,我查看了我的同事安装了哪个版本的openpyxl。原来是2.0.5版。所以我回到了那个版本(而不是2.1.0),现在我没有打开相同工作簿的问题。版本2.1.0出错了?要检查它是否对齐,我需要重新安装2.1.0版并重试。我会这样做并报告回来。 – Pythoness 2014-09-23 16:19:21

1

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

+1

虽然很简单,但可以考虑澄清_how_您在Excel中清除了数据的格式,以使您的答案更加完整。 – J0e3gan 2014-10-30 02:45:53

相关问题