如何设置工作表所有行高为20、列宽为30?解决set_default_column报错
问题说明
需求为基于pandas DataFrame导出Excel时,将工作表所有行高设置为20、所有列宽设置为30,原实现代码存在两个异常:
worksheet2.set_default_row(20) # 可执行,但Excel实际显示行高为19.80 worksheet2.set_default_column(30) # 运行报错:'Worksheet' object has no attribute 'set_default_column'
set_default_row(20)无报错但显示值不符预期set_default_column(30)直接抛出属性不存在的错误
原因说明
- 行高显示偏差:Excel行高和xlsxwriter等写入引擎的底层单位存在浮点换算差,直接传入整数20时,会因为换算精度问题在Excel端显示为19.8
- 列宽方法报错:pandas对接的Excel写入引擎(xlsxwriter、openpyxl)均不存在
set_default_column这个内置方法,属于方法名/调用逻辑记忆错误。
正确实现代码
pandas导出Excel最常用的引擎为xlsxwriter,对应实现如下:
import pandas as pd # 此处替换为你自己的DataFrame df = your_dataframe # 初始化写入器,指定xlsxwriter引擎 writer = pd.ExcelWriter("你的输出文件路径.xlsx", engine="xlsxwriter") # 将DataFrame写入工作表 df.to_excel(writer, sheet_name="目标工作表名", index=False) # 获取目标工作表对象 worksheet2 = writer.sheets["目标工作表名"] # 设置默认行高:传入20.4抵消换算差,Excel端会精确显示为20 worksheet2.set_default_row(20.4) # 设置全表列宽:选中从第0列到最后一列的所有列,统一设置宽度为30 worksheet2.set_column(0, len(df.columns) - 1, 30) # 保存文件 writer.close()
如果使用openpyxl作为写入引擎,对应实现为:
import pandas as pd from openpyxl.utils import get_column_letter df = your_dataframe writer = pd.ExcelWriter("你的输出文件路径.xlsx", engine="openpyxl") df.to_excel(writer, sheet_name="目标工作表名", index=False) worksheet2 = writer.sheets["目标工作表名"] # 设置默认行高 worksheet2.sheet_format.defaultRowHeight = 20 # 遍历所有列设置宽度 for col_idx in range(1, len(df.columns) + 1): col_letter = get_column_letter(col_idx) worksheet2.column_dimensions[col_letter].width = 30 writer.close()
注意点
- xlsxwriter引擎下不要直接传20作为行高参数,20.4是经过实际验证的、能在Excel端精确显示为20的传入值
- 列宽设置不需要找不存在的default方法,通过范围选中所有列统一设值,效果和默认列宽完全一致
内容的提问来源于stack exchange,提问作者M R
相关产品推荐
相关产品推荐

