<h3>预处理文件</h3>
<p>我通过预处理excel文件解决了这个问题</p>
<p>发现mi问题出现在“*/myfile.xlsx/xl/styles.xml”,其中多个<code>xf</code>标记具有属性<code>indent="-1"</code>,openpyxl仅支持非负值,当发现负值时引发该异常</p>
<p>在花了一段时间试图覆盖整个openpyxl层次结构以捕获异常之后,我决定处理XLSX</p>
<p>这是我的密码:</p>
<pre><code>def fix_xlsx(file_name):
with zipfile.ZipFile(file_name) as input_file, zipfile.ZipFile(file_name + ".out", "w") as output_file:
# Iterate over files
for inzipinfo in input_file.infolist():
with input_file.open(inzipinfo) as infile:
if "xl/styles.xml" in inzipinfo.filename:
# Read, Process & Write
lines = infile.readlines()
new_lines = b"\n".join([line.replace(b'indent="-1"', b'indent="0"') for line in lines])
output_file.writestr(inzipinfo.filename, new_lines)
else:
# Read & Write
output_file.writestr(inzipinfo.filename, b"\n".join([line for line in infile.readlines()]))
# Replace file
os.replace(file_name + ".out", file_name)
</code></pre>
<h3>免责声明:</h3>
<p>我必须说,这不是一个非常优雅的解决方案,因为整个文件都经过处理,并且使用了一个辅助文件。
此外,我不是excel专家,我不知道wheter将这些标记的<code>indent="-1"</code>更改为<code>indent="0"</code>可能会导致文件中的格式问题。这是我的工作解决方案,不能真正说出这些标签的效果</p>