【问题标题】:ValueError: row index was 65536, not allowed by .xls formatValueError:行索引为 65536,.xls 格式不允许
【发布时间】:2017-08-17 17:35:11
【问题描述】:

目前,我正在尝试使用 xlwt 编辑现有的 excel 文件。不想直接在excel上编辑,所以先复制一份。

new_wb = xlutils.copy(file_location)

从这个副本中,我使用 xlwt 模块将新列写入新复制的 excel 文件并保存。但是,当我尝试复制时出现错误:

ValueError: row index was 65536, not allowed by .xls format

我有点困惑,因为我复制的文件是 xlsx 文件,而不是 xls。我从不在我的代码中使用 xls 格式。

任何指导将不胜感激。

【问题讨论】:

  • xlutils 仅适用于xls 格式...(它使用xlrd/xlwt 库...)
  • xlutils.copy 使用 xlrd 读取和使用 xlwt 写入。 xlrd 可以读取.xls.xlsx 格式,但xlwt 只能写入.xls 格式,限制为65536 (2**16) 行。

标签: python xlwt xlutils


【解决方案1】:

改用openpyxl。它支持 .xlsx 文件。

.xls 文件的行数限制为 65,536。 xlsutils 可能不支持 .xlsx 文件。

您可以尝试这样做,看看是否有效:

from openpyxl import Workbook, load_workbook

wb = load_workbook('filename.xlsx')
wb = Workbook(write_only=True)
.
.
.
(make your edits)
.
.
.
wb.save('new_filename.xlsx')

【讨论】:

  • 我尝试用openpyxl写,但保存时继续报MemoryError。我尝试了只读/写格式,但不确定如何将只写标签应用于现有的 excel 文件。 write_only = True 标签也可以应用于现有的 excel 文件吗?基本上,我不清楚如何解决 MemoryError 所以用 xlwt 重写了我的代码。
  • 只读/只写格式不允许您编辑现有文件。您必须使用 openpxl 加载工作簿并在进行更改后保存。
  • 我明白了。那么,在我的情况下,使用 openpyxl 或 xlwt 编辑现有的 excel 文件是不是不需要付费?尝试使用 openpyxl 保存 Excel 文件时出现 MemoryError;可能是因为文件太大。
  • 我对我的回答做了一些修改。你可以试试看。
  • @BrianKim: Read up openpyexcelread_onlywrite_only 模式。它们旨在节省内存消耗,但具有特定的限制(例如在只写工作簿中的行只能使用append() 添加)。
【解决方案2】:

对于遇到与pandas'DataFrame.to_excel() 相同问题的人的简短解决方案:如果您要保存到 .xls 扩展程序中,只需将其更改为 .xlsx 扩展程序即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    相关资源
    最近更新 更多