xlsxwriter导出Excel时第一列无法左对齐问题求助
问题根因
Pandas调用to_excel写入数据时,会为所有单元格自动添加默认的单元格格式,单元格级别的格式优先级高于set_column设置的列级格式,因此你配置的A列左对齐会被覆盖。而表头是你手动调用worksheet.write写入的,直接使用了自定义格式,不受pandas默认格式影响,所以可以正常生效。
另外补充一个容易踩的坑:你当前代码中df.to_excel没有设置index=False,默认会把Pandas的行索引输出到A列,你自己的数据集第一列实际对应Excel的B列,如果你要对齐的是自有数据的第一列,列范围设置成A:A本身就是错误的。
解决方案
方案1:不需要保留Pandas行索引(推荐)
修改后完整代码如下:
def export_to_xlsx(date): global df ## CREATE PD DATAFRAME all_mp_dict = scraper(date) df = pd.DataFrame(all_mp_dict) ## WORKSHEET FORMATTING (TOP ROW - YELLOW BG COLOR) workbook_loc = './mp_excel/mp_data_'+date+'.xlsx' writer = pd.ExcelWriter(workbook_loc, engine='xlsxwriter') # 新增index=False,不输出行索引,数据第一列对应Excel A列 df.to_excel(writer, sheet_name=date+'_raw', index=False) workbook = writer.book worksheet = writer.sheets[date+'_raw'] header_format = workbook.add_format({ 'bold': True, 'text_wrap': True, 'valign': 'top', 'fg_color': '#FFFF00', 'border': 1}) # 去掉+1,因为没有索引列,表头从A列开始 for col_num, value in enumerate(df.columns.values): worksheet.write(0, col_num, value, header_format) ## WORKSHEET FORMATTING (FIRST COLUMN - ALIGN LEFT) a_format = workbook.add_format() a_format.set_align('left') # 遍历第一列所有数据行,手动写入带对齐格式的值,覆盖pandas默认格式 for row_num in range(1, len(df)+1): cell_value = df.iloc[row_num-1, 0] worksheet.write(row_num, 0, cell_value, a_format) # 单独设置列宽 worksheet.set_column('A:A', 100) ## TO_EXCEL writer.close()
方案2:需要保留Pandas行索引
如果需要保留A列的行索引,只需要对齐A列的索引值,修改第一列格式部分的代码即可:
## WORKSHEET FORMATTING (FIRST COLUMN - ALIGN LEFT) a_format = workbook.add_format() a_format.set_align('left') # 遍历A列所有索引行,手动写入带对齐格式的索引值 for row_num in range(1, len(df)+1): cell_value = df.index[row_num-1] worksheet.write(row_num, 0, cell_value, a_format) # 单独设置列宽 worksheet.set_column('A:A', 100)
内容的提问来源于stack exchange,提问作者mess1n
相关产品推荐
相关产品推荐

