Openpyxl created excel file with table causes file that requires recovery 错误
Openpyxl created excel file with table causes file that requires recovery error
我一直在测试使用 openpyxl 将 table 添加到工作表,但是当我尝试打开它时出现以下错误。文件打开,但格式不正确。点击恢复后,excel 报告 table xml 出现问题。这个有workaround/fix吗?
我使用的代码:
import openpyxl
from openpyxl import Workbook
from openpyxl.worksheet.table import Table, TableStyleInfo
xl_file_name = "new_test.xlsx"
wb = Workbook()
ws = wb.worksheets[0]
ws.title = "Table_Sheet"
headers = ["header1","header2","header3"]
for col in range(1,len(headers)+1):
for row in range(1,5):
if row == 1:
ws.cell(row,col).value = headers[col-1]
else:
ws.cell(row,col).value = str(row)
tbl = Table(displayName="Tbl1",ref="A1:C4")
style = TableStyleInfo(name="TableStyleMedium9", showFirstColumn=False, showLastColumn=False, showRowStripes=True, showColumnStripes=True)
tbl.tableStyleInfo = style
ws.add_table(tbl)
wb.save("new_test.xlsx")
您的 table 名称导致了问题。 运行 与 displayName="Tbl"
或 displayName="Tbl_1"
相同的代码,您会发现它工作正常。我不是 100% 确定,但我认为问题的原因是您提供的名称与 TBL1 可能的单元格引用的格式冲突。
对我来说,以下方法有效:
- 根据需要更改工作簿(仅数据无格式)
- 保存工作簿(如果您尝试在此处打开它,它将显示错误消息)
- 关闭工作簿
- 再次打开工作簿(我认为这里 Excel 自动修复了问题)
- 插入必要的格式化命令
- 保存工作簿
- 关闭工作簿
或者,作为代码:
import openpyxl
workbook = openpyxl.load_workbook(Source_Path)
##your code appending and deleting values - which I think sometimes causes the errors
workbook.save(Destination_Path)
workbook.close
#Now open it again
workbook = openpyxl.load_workbook(Destination_Path)
#Your Code to format
workbook.save(Destination_Path)
workbook.close
现在您应该可以正确打开 Excel 文件了。
我收到了同样的错误消息。
我在创建名称开头带有数字的表,所以我更改了该代码以在开头添加 t_,所以
table_name = "112MHZ_data"
变成了
table_name = "t_112MHZ_data"
这为我解决了这个问题。
我一直在测试使用 openpyxl 将 table 添加到工作表,但是当我尝试打开它时出现以下错误。文件打开,但格式不正确。点击恢复后,excel 报告 table xml 出现问题。这个有workaround/fix吗?
import openpyxl
from openpyxl import Workbook
from openpyxl.worksheet.table import Table, TableStyleInfo
xl_file_name = "new_test.xlsx"
wb = Workbook()
ws = wb.worksheets[0]
ws.title = "Table_Sheet"
headers = ["header1","header2","header3"]
for col in range(1,len(headers)+1):
for row in range(1,5):
if row == 1:
ws.cell(row,col).value = headers[col-1]
else:
ws.cell(row,col).value = str(row)
tbl = Table(displayName="Tbl1",ref="A1:C4")
style = TableStyleInfo(name="TableStyleMedium9", showFirstColumn=False, showLastColumn=False, showRowStripes=True, showColumnStripes=True)
tbl.tableStyleInfo = style
ws.add_table(tbl)
wb.save("new_test.xlsx")
您的 table 名称导致了问题。 运行 与 displayName="Tbl"
或 displayName="Tbl_1"
相同的代码,您会发现它工作正常。我不是 100% 确定,但我认为问题的原因是您提供的名称与 TBL1 可能的单元格引用的格式冲突。
对我来说,以下方法有效:
- 根据需要更改工作簿(仅数据无格式)
- 保存工作簿(如果您尝试在此处打开它,它将显示错误消息)
- 关闭工作簿
- 再次打开工作簿(我认为这里 Excel 自动修复了问题)
- 插入必要的格式化命令
- 保存工作簿
- 关闭工作簿
或者,作为代码:
import openpyxl
workbook = openpyxl.load_workbook(Source_Path)
##your code appending and deleting values - which I think sometimes causes the errors
workbook.save(Destination_Path)
workbook.close
#Now open it again
workbook = openpyxl.load_workbook(Destination_Path)
#Your Code to format
workbook.save(Destination_Path)
workbook.close
现在您应该可以正确打开 Excel 文件了。
我收到了同样的错误消息。
我在创建名称开头带有数字的表,所以我更改了该代码以在开头添加 t_,所以
table_name = "112MHZ_data"
变成了
table_name = "t_112MHZ_data"
这为我解决了这个问题。