参考博文:https://www.cjavapy.com/article/2287/

方法一:styleframe库

  1. writer = pd.ExcelWriter(filePath)
  2. columns = df.columns.tolist()
  3. sf = StyleFrame(df)
  4. sf.to_excel(writer, sheet_name=shtnames[i], index=False, best_fit=columns, columns_and_rows_to_freeze='B2', row_to_add_filters=0,)
  5. writer.save() # 写入硬盘

缺点:调整的列宽比列最大长度还要大一些
styleframe对象特有方法:

  • best_fit=columns: 需要自动调整列宽的列
  • columns_and_rows_to_freeze=’B2’: 冻结窗口的位置
  • row_to_add_filters=0: 添加筛选按钮,0表示是,1表示否

    方法二:把列最大长度设为列宽

    1. writer = pd.ExcelWriter(xlsFilepath, engine='xlsxwriter')
    2. # 写excel文件使用pandas to_excel
    3. my_dataframe.to_excel(writer, startrow = 1, sheet_name='Sheet1', index=False)
    4. workbook = writer.book
    5. worksheet = writer.sheets['Sheet1']
    6. # 遍历每一列并设置width ==该列的最大长度。填充长度也增加了2。
    7. for i, col in enumerate(my_dataframe.columns):
    8. # 求列I的长度
    9. column_len = my_dataframe[col].astype(str).str.len().max()
    10. # 如果列标题较大,则设置长度
    11. # 大于最大列值长度
    12. column_len = max(column_len, len(col)) + 2
    13. # 设置列的长度
    14. worksheet.set_column(i, i, column_len)
    15. writer.save()

    报错:AttributeError: ‘Worksheet’ object has no attribute ‘set_column’
    可能出现的所有原因:https://blog.csdn.net/qq_39691492/article/details/119757362

  • 保存的文件类型不是 .xlsx

  • 未安装 xlsxwriter
  • 最新openpyxl的删除了对应方法
  • openpyxl版本问题

缺点:当列标题为最大长度时,列宽调整失败