【问题标题】:xlsxwriter formatting is corrupting my excel filexlsxwriter 格式正在破坏我的 excel 文件
【发布时间】:2021-04-08 18:51:04
【问题描述】:

问题,我正在尝试使用 xlsxwriter 对 xlsx 文件应用一些格式,但 Excel 说我导出的文件已损坏。

我认为问题源于这一行:format1 = workbook.add_format({'font_color': 'red'}) 但我不明白为什么。

我已将 MS Excel 更新到最新版本并尝试在另一台计算机上打开文件,但我不断收到此错误:我们发现“export_top200format.xlsx”中的某些内容存在问题。你想让我们尽可能多地恢复吗?如果您信任此工作簿的来源,请单击“是”。

随后出现此错误:

Excel 能够通过修复或删除不可读的内容来打开文件。

import pandas as pd
import os
import xlsxwriter

# IMPORTING dfCAtop200_CLEANED
ca_top200_CLEANED = 'export_top200CLEANEDTEST.xlsx'

# READING 'export_top200CLEANEDTEST.xlsx' FILE
dfCAtop200_Formatted = pd.read_excel(
    ca_top200_CLEANED)

column_list = dfCAtop200_Formatted.columns

writer = pd.ExcelWriter(
    '/Users/BTS/Documents/python_work/ABC Charts/export_top200FORMATTED.xlsx', engine='xlsxwriter')

dfCAtop200_Formatted.to_excel(writer, index=False)

# to remove source header formatting

for idx, val in enumerate(column_list):
    worksheet.write(0, idx, val)

# workbook stuff

workbook = xlsxwriter.Workbook('export_top200FORMATTED.xlsx')
worksheet = writer.sheets['Sheet1']

format1 = workbook.add_format({'font_color': 'red'})

worksheet.set_column('B:B', 11, format1)


writer.save()

【问题讨论】:

  • 这是因为您的代码中存在错误。您可以通过注释掉所有行来调试它,取消注释第一行,运行代码,打开文件以查看它是否正常打开并重复。我也可以稍后或明天看看。

标签: python-3.x excel pandas xlsxwriter corrupt


【解决方案1】:

问题是程序在尝试使用 Pandas 创建的工作表添加格式时,正在用 XlsxWriter 创建的新文件覆盖 Pandas 创建的 xlsx 文件。问题在这里:

workbook = xlsxwriter.Workbook('export_top200FORMATTED.xlsx')
worksheet = writer.sheets['Sheet1']

访问 Pandas 创建的工作簿或工作表的正确方法显示在 Working with Python Pandas and XlsxWriter 上的 XlsxWriter 文档中。

这是一个基于您的代码的工作示例。它还修复了上面代码中数据帧数据的第一行被覆盖的问题:

import pandas as pd

# Create a Pandas dataframe from some data.
data = [10, 20, 30, 40, 50, 60]
df = pd.DataFrame({'Foo': data,
                   'Bar' : data,
                   'Baz' : data})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter("formatting.xlsx", engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object. Note that we turn off
# the default header and skip one row to allow us to insert a user defined
# header.
df.to_excel(writer, sheet_name='Sheet1', startrow=1, header=False)

# Get the xlsxwriter workbook and worksheet objects.
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

# Rewrite the column headers without formatting.
for col_num, value in enumerate(df.columns.values):
    worksheet.write(0, col_num + 1, value)

# Add a format to column B.
format1 = workbook.add_format({'font_color': 'red'})

worksheet.set_column('B:B', 11, format1)

# Close the Pandas Excel writer and output the Excel file.
writer.save()

输出

【讨论】:

  • 您好,感谢您的及时回复。您的指南解决了文件损坏问题,但它仍然不会格式化列。应用格式化时,我得到以下回溯: Traceback(最近一次调用):文件“/Users/BTS/Documents/python_work/charts_script.py”,第 194 行,在 format1 = workbook.add_format({' font_color': 'red'}) 文件“/Users/BTS/Library/Python/3.9/lib/python/xlsxwriter/workbook.py”,第 214 行,在 add_format format_properties = self.default_format_properties.copy() AttributeError: 'dict ' 对象没有属性 'default_format_properties'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 2016-03-01
  • 2022-06-15
  • 2021-06-05
  • 2017-06-02
  • 1970-01-01
相关资源
最近更新 更多