为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

弑天下 2023-04-11 15:38:42
我有一个名为“File.xlsx”的现有 excel 文件和一个名为“MySheet”的工作表MySheet中的数据目前是一个范围,我想打开excel文件,将MySheet中的数据转换成excel表格。我能够成功地完成这部分,但是当我打开 excel 文件时,我收到一条错误消息:已修复的记录:来自 /xl/tables/table1.xml 部分的表(表)该脚本可用于创建表格,但我想避免 excel 文件出现不可读错误。我正在使用的脚本在这里:from openpyxl.worksheet.table import Tablefrom openpyxl.utils import get_column_letterfile_name = "File.xlsx"wb = load_workbook(file_name)ws = wb['MySheet']max_row = ws.max_rowmax_column = ws.max_columntable = Table(displayName="FailureData", ref="A1:" + get_column_letter(max_column) + str(max_row))ws.add_table(table)wb.save(file_name)wb.close()
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

在我的例子中,当 2 个标头字段具有相同的名称时会发生错误。解决方案是通过在每次重复时递增 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


查看完整回答
反对 回复 2023-04-11
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

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



查看完整回答
反对 回复 2023-04-11
?
函数式编程

TA贡献1807条经验 获得超9个赞

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



查看完整回答
反对 回复 2023-04-11
  • 3 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信