python - 加载和保存列表索引超出范围后的openpyxl(python)

标签 python openpyxl

我使用 openpyxl 在 python 中处理 excel 文档。打开并保存文件后,我无法在文件管理器中打开它,它已损坏。

workbook = openpyxl.load_workbook(path_to_tmp_xlsm)
workbook.save(path_to_tmp_xlsm)
print(path_to_tmp_xlsm)

我的错误:

list index out of range

ps 这个脚本在 Windows 下运行正常,但是在 Linux 下我有这个错误

Traceback (most recent call last):
  File "/home/alex/projects/bokapi/Main.py", line 11, in <module>
    class Main:
  File "/home/alex/projects/bokapi/Main.py", line 12, in Main
    EmailsDriveWorker()
  File "/home/alex/projects/bokapi/app/EmailDriveWorker.py", line 33, in __init__
    self.log_manager.save_all_companies_inf_log_to_gd()
  File "/home/alex/projects/bokapi/app/EmailDriveWorker.py", line 202, in save_all_companies_inf_log_to_gd
    path_to_xlsx = self.xmsl_box.update_log_file(log_list=logs, file=self.file)
  File "/home/alex/projects/bokapi/xmsl/XmslBox.py", line 172, in update_log_file
    workbook.save(path_to_tmp_xlsm)
  File "/home/alex/projects/bokapi/venv/lib/python3.5/site-packages/openpyxl/workbook/workbook.py", line 367, in save
    save_workbook(self, filename)
  File "/home/alex/projects/bokapi/venv/lib/python3.5/site-packages/openpyxl/writer/excel.py", line 284, in save_workbook
    writer.save(filename)
  File "/home/alex/projects/bokapi/venv/lib/python3.5/site-packages/openpyxl/writer/excel.py", line 266, in save
    self.write_data()
  File "/home/alex/projects/bokapi/venv/lib/python3.5/site-packages/openpyxl/writer/excel.py", line 95, in write_data
    archive.writestr(ARC_WORKBOOK, write_workbook(self.workbook))
  File "/home/alex/projects/bokapi/venv/lib/python3.5/site-packages/openpyxl/writer/workbook.py", line 95, in write_workbook
    wb.views[0].activeTab = active
IndexError: list index out of range

Process finished with exit code 1

最佳答案

你(和我)似乎遇到了这个错误:Saving workbook gives IndexError on wb.views . (也报告了 here ,但是那个被关闭了,因为 OP 无法重现。)好消息是这个错误已经修复了......两周前。我不知道它什么时候会出现在 openpyxl 的分布式版本中,但与此同时你可以像这样解决这个错误:

wb = load_workbook("name.xlsx")
# Fix malformed workbook bug (gag)  
if not wb.views:
    wb.views.append(openpyxl.workbook.views.BookView())

我已验证当 wb.views 为空列表时会发生错误。这只是添加了一个具有默认值的新 View ,Excel 似乎很喜欢它。

附言。似乎有些文件只是不存储 View (或者如果它们存储 View ,openpyxl 无法解析它。)在我的例子中,相同的脚本,在同一台计算机(OS X)上,工作在一个文档上,在另一个文档上失败。两者最后都是用 Excel 编辑的,但问题文件之前是用 OpenOffice 编写的;也许这是相关的。

关于python - 加载和保存列表索引超出范围后的openpyxl(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48669695/

相关文章:

python - 如何将某些行增加 1 个 Python

python - 从 python 中隐藏取消隐藏工作表

python - 如何使用 openpyxl 在 Excel 工作表中插入数组公式?

python - “UpdateQuery”对象没有属性 'get_field' 错误

python - 使用 openpyxl 写入行?

python - 用 pandas 数据框覆盖 Excel 工作表而不影响其他工作表

python - 从 Python 中的线程引发多个异常

python - 使用 Python 隐藏文件夹/文件

python - 在 python 中聚合时间序列

python - 如何使用 SQLAlchemy from_select 插入选择?