将 xlsxwriter 公式应用于标题和某些列

问题描述 投票:0回答:1

我正在尝试向 Pandas 数据框的 Excel 输出添加一些格式,但只有部分格式有效。

我可以使用 2 位十进制数字格式,但不能使用列宽、日期格式、标题对齐或自动调整。这里做错了什么?我没有收到错误,但当我在 Excel 中打开输出文件时,我提到的格式并不在输出文件中。

# Create a Pandas Excel writer using XlxsWriter as the engine.
writer = pd.ExcelWriter(my_path, engine='xlsxwriter')

# Convert the df to XlsxWriter Excel object.
df_new_db.to_excel(writer, sheet_name="Sheet1",index=False)

workbook = writer.book
worksheet = writer.sheets['Sheet1']

num_2deci = workbook.add_format({'num_format':'0.00'})
my_dt = workbook.add_format({'num_format':'m/d/yyyy'})
align_left = workbook.add_format({'align':'left'})
worksheet.set_row(0, None, align_left)
worksheet.set_column('V:V', None, my_dt)
worksheet.set_column('Y:Y', None, num_2deci)
worksheet.set_column('Z:Z', None, num_2deci)
    
worksheet.autofit()
writer.close()
python pandas excel formatting xlsxwriter
1个回答
0
投票

在上面评论者的帮助下我能够得到它(谢谢!)。这是我想出的答案,以防对其他人有帮助:

# Create a Pandas Excel writer using XlxsWriter as the engine. Set the default date column display in this step.
writer = pd.ExcelWriter(r'C:\Users\JoelSilverman\Documents\current_python\excel_merge\output\new_db_rows.xlsx', engine='xlsxwriter', date_format='m/d/yyyy')

# Convert the df to XlsxWriter Excel object, but drop the header row so that it can be formated below using xlsxwriter
df_new_db.to_excel(writer, sheet_name="Sheet1", startrow=1, header=False,index=False)

# Make the workbook and worksheet
workbook = writer.book
worksheet = writer.sheets['Sheet1']

# Define the number format to display: 2 decimal places.
num_2deci = workbook.add_format({'num_format':'0.00'})

# Format the columns using the decimal format
worksheet.set_column("Y:Z", None, num_2deci)

# Format the header with the header format you define
header_format = workbook.add_format({"align": "left"})
for col_num, value in enumerate(df_new_db.columns.values):
    worksheet.write(0, col_num, value, header_format)    

#Autofit the column width to fit the data
worksheet.autofit()
writer.close()
© www.soinside.com 2019 - 2024. All rights reserved.