如何使用Python实现.xls格式Excel文件内所有数据的居中对齐设置
旧版.xls文件全表设置居中对齐的Python实现方案
依赖库适配说明
- 注意:
.xls是Excel 97-2003的二进制格式,openpyxl、pandas等常用数据处理库原生不支持对该格式的格式读写操作,强制使用会直接报错。 - 适配该格式的成熟工具链为:
xlrd(读取旧版.xls内容与原有格式)+xlwt(写入旧版.xls格式,支持自定义单元格属性)+xlutils(实现只读工作簿到可编辑工作簿的无损拷贝)。
踩坑预警:
xlrd从2.0版本开始完全移除了对.xls格式的支持,仅能处理.xlsx文件,安装时必须锁定1.2.0版本,否则读取文件会直接抛出格式不兼容错误。
实现步骤
1. 安装指定版本依赖
pip install xlrd==1.2.0 xlwt xlutils
2. 核心实现代码
代码逻辑会保留原文件所有的字体、填充、边框、数字格式,仅修改对齐属性为水平+垂直居中,不会破坏原有内容格式:
import xlrd import xlwt from xlutils.copy import copy as xl_copy # 替换为你自己的文件路径 SOURCE_FILE = "待调整的原始文件.xls" TARGET_FILE = "调整完成的居中对齐文件.xls" # 开启格式信息读取,保留原有单元格样式 read_book = xlrd.open_workbook(SOURCE_FILE, formatting_info=True) # 将只读工作簿拷贝为可编辑版本,避免原有内容丢失 edit_book = xl_copy(read_book) # 遍历所有工作表 for sheet_num in range(read_book.nsheets): origin_sheet = read_book.sheet_by_index(sheet_num) target_sheet = edit_book.get_sheet(sheet_num) # 遍历当前工作表所有已使用的行、列范围 for row in range(origin_sheet.nrows): for col in range(origin_sheet.ncols): # 读取当前单元格原有样式索引,为后续修改对齐属性做准备 origin_style_index = origin_sheet.cell_xf_index(row, col) # 基于原有样式创建新的样式对象 new_cell_style = xlwt.XFStyle() new_cell_style.xf_index = origin_style_index # 配置居中规则:水平居中 + 垂直居中 new_cell_style.alignment = xlwt.Alignment() new_cell_style.alignment.horz = xlwt.Alignment.HORZ_CENTER new_cell_style.alignment.vert = xlwt.Alignment.VERT_CENTER # 将修改后的样式应用到单元格,同步保留原有单元格值 target_sheet.write(row, col, origin_sheet.cell_value(row, col), new_cell_style) # 保存最终调整完成的文件 edit_book.save(TARGET_FILE)
常见问题排查
- 读取文件时报
formatting_info=True参数无效:检查xlrd版本,2.0+版本完全关闭了对.xls的格式读取能力,必须降级到1.2.0版本 - 调整后原有格式全部丢失:检查代码中是否直接给单元格套用了全新的空白样式,没有继承原有单元格的样式索引
- 运行后找不到原有数据:检查是否没有通过xlutils的copy方法转换工作簿,直接在xlrd返回的只读对象上写入——xlrd读取的工作簿是完全只读的,无法直接编辑
- 如果确认文件实际是xlsx格式(仅修改后缀为xls),无需使用上述工具链,可直接用openpyxl加载后批量修改单元格对齐属性实现需求,兼容性更好
内容的提问来源于stack exchange,提问作者user15540415
相关产品推荐
相关产品推荐

