python-3.x - xlsxwriter 格式正在破坏我的 excel 文件
问题描述
问题,我正在尝试使用 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()
解决方案
问题是程序正在用 XlsxWriter 创建的新文件覆盖 Pandas 创建的 xlsx 文件,同时尝试使用 Pandas 创建的工作表添加格式。问题在这里:
workbook = xlsxwriter.Workbook('export_top200FORMATTED.xlsx')
worksheet = writer.sheets['Sheet1']
访问 Pandas 创建的工作簿或工作表的正确方法显示在有关使用 Python Pandas 和 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()
输出:
推荐阅读
- python - Django Twitter API 错误:“代码”:215,“消息”:“错误的身份验证数据。”
- selenium - 无法使用 selenium webdriver 打开谷歌浏览器
- haskell - 如何使用新的 cabal 生成 HTML 代码覆盖率报告?
- python - 如何使用 MySql 上的 Python Django 在 Heroku 上运行应用程序?KeyError: '', code=H10 desc="App 崩溃"
- php - 在 Laravel 5 和 AJAX 上传块
- java - 使用 ArrayList 对我的数组进行更改,然后将其转换回数组,数组不会更改
- python - 当我改变一个对象的值时,我想改变另一个对象的值
- python - Pandas - 多条件查找速度
- c++ - 如果 sizeof(struct ...) 不等于给定数字,如何获得 C 编译器#error?
- c# - 如何从 SslCredentials 和令牌字符串创建 CallCredentials