excel本质是一堆xml的zip文件, 这个异常是由于遇到了 `<fill/>`的节点,然后openpyxl不处理
class Fill(Serialisable):
"""Base class"""
tagname = "fill"
@classmethod
def from_tree(cls, el):
children = [c for c in el]
if not children:
return # 这里返回None
child = children[0]
if "patternFill" in child.tag:
return PatternFill._from_tree(child)
return super(Fill, GradientFill).from_tree(child)
#--------------------------
def _convert(expected_type, value):
"""
Check value is of or can be converted to expected type.
"""
if not isinstance(value, expected_type):
try:
value = expected_type(value) # Fill 不支持__init__报错
except:
raise TypeError('expected ' + str(expected_type))
return value
我的解决方式
reader = ExcelReader(f'{table}.xlsx')
def new_read(read):
def inner(file):
r = read(file)
if file == 'xl/styles.xml':
r = r.replace(b'<fill/>', b'')
return r
return inner
reader.archive.read = new_read(reader.archive.read)
reader.read()
reader.wb.save(f'{table}.xlsx')