我在 Ubuntu Server
中使用openpyxl python excel阅读器和编写器当我使用以下命令
时from openpyxl import load_workbook,Workbook
book = load_workbook(filename='/var/www/test.xlsx')
将错误抛出
for _name in node:
TypeError: 'NoneType' object is not iterable
但在本地系统中一切都很好。任何人都知道为什么会这样,以及如何解决这个问题?
更新
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/openpyxl/reader/excel.py", line 202, in load_workbook
parsed_styles = read_style_table(archive)
File "/usr/local/lib/python2.7/dist-packages/openpyxl/reader/style.py", line 181, in read_style_table
p.parse()
File "/usr/local/lib/python2.7/dist-packages/openpyxl/reader/style.py", line 53, in parse
self.parse_named_styles()
File "/usr/local/lib/python2.7/dist-packages/openpyxl/reader/style.py", line 109, in parse_named_styles
names = self._parse_style_names()
File "/usr/local/lib/python2.7/dist-packages/openpyxl/reader/style.py", line 128, in _parse_style_names
for _name in node:
TypeError: 'NoneType' object is not iterable
答案 0 :(得分:0)
看起来openpyxl无法理解您的命名样式列表。您应该首先提取.xlsx文件(它只是一个带有不同结尾的.zip存档),然后查找定义样式的XML文件(它是scan 'table',
{COLUMNS => ['data:title'],
FILTER => "SingleColumnValueFilter('data', 'title', = , 'regexstring:*bye')
"}
)。验证它是格式良好的XML,并且没有损坏。您可以使用众多在线XML检查程序之一来完成此操作。
如果那不是罪魁祸首,您可能只是尝试依赖openpyxl的“仁慈”,删除styles.xml,重新压缩为.zip,重命名为.xlsx,然后重试。
答案 1 :(得分:0)
我遇到了同样的问题,似乎路径不正确。使用Excel打开文件,然后从“文件”选项卡中复制粘贴路径。
答案 2 :(得分:0)
在许多情况下,它与格式错误的样式表有关,正如之前的海报已经提到的那样。我有几个由Oracle SQLDeveloper生成的.xlsx文件。 当我想用openpyxl解析它们时,我需要打开然后将它们保存在Excel中。否则我会得到与你相同的错误。 我没有比较样式表(重新保存文件之前和之后),因此我无法通过在Excel中保存文件来告诉您修复了什么。它只适用于这种特殊情况,但它也适用于你的。
答案 3 :(得分:0)
这是openpyxml版本2.3中的错误,请参阅:https://bitbucket.org/openpyxl/openpyxl/issues/544,它已在2.3.1中修复。
升级到最新版本可以轻松解决问题,运行:
pip install openpyxl -I
这样,pip会忽略您当前的库版本并获取最新版本。
答案 4 :(得分:0)
我今天在Windows上遇到了这个问题。
事实证明,这是因为在保存文件时,在“另存为类型:”下,我选择了Strict Open XML Spreadsheet (*.xlsx)
。
当我将其保存为Excel Workbook (*.xlsx)
我假设所有.xlsx
个文件都是相同的,显然情况并非如此。