在openpyxl中使用add_table()方法会损坏现有的excel文件



我有一个名为"文件.xlsx";用一张称为";MySheet";

MySheet中的数据目前是一个范围,我想打开excel文件并将MySheet的数据转换为excel表。我成功地完成了这一部分,但当我打开excel文件时,我收到一条错误消息,内容是:修复的记录:来自/xl/tables/table1.xml的表部分(表(

脚本可用于创建表,但我希望避免excel文件出现无法读取的错误

我使用的脚本在这里:

from openpyxl.worksheet.table import Table
from openpyxl.utils import get_column_letter
file_name = "File.xlsx"
wb = load_workbook(file_name)
ws = wb['MySheet']
max_row = ws.max_row
max_column = ws.max_column
table = Table(displayName="FailureData", ref="A1:" + get_column_letter(max_column) + str(max_row))
ws.add_table(table)
wb.save(file_name)
wb.close()

在我的例子中,当两个头字段具有相同的名称时,就会发生错误。解决方案是通过每次重复增加1来确保标头中具有唯一的字段名称:

f = ["Ford", "Volvo", "BMW", "Ford", "Ford"]
print(f)
>>['Ford', 'Volvo', 'BMW', 'Ford', 'Ford']
fields_out = [(x if i == f.index(x) else x + str(f.count(x) - f[i + 1:].count(x))) for i, x in enumerate(f)]
print(fields_out)
>>['Ford', 'Volvo', 'BMW', 'Ford2', 'Ford3']

对于通过接口进行的相同操作,Excel会修改重复字段的名称。

openpyxl 3.0.5版本

我想明白了。这似乎是openpyxl的旧版本的问题,我使用的是2.6.1版本。我更新到了最新的3.0.4版本,错误不再显示。

我无意中发现了同样的错误。我的问题是我的表名是以数字开头的。Excel显然不喜欢这样。

我知道这已经有一段时间了,但对于其他遇到这种情况的人来说,我也遇到了类似的问题。该表有两个名称相同的列。我从df中删除了重复的列,这就解决了问题。

最新更新