You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Openpyxl遍历多个工作表批量修改其属性

核心错误原因

  1. 行高设置的num变量定义在遍历月份的循环外层:处理1月工作表时num从1累加到32,处理后续月份时num已经大于32,相当于给其他月份的33行及以后设置行高,前32行没有行高配置,所以只有1月格式看起来生效。
  2. openpyxl新建工作簿时默认会生成名为Sheet的工作表,你没有将它加入待处理的工作表列表,所以不会被格式化。
  3. Alignment的wrap_text参数接收布尔值(True/False),你传入的"center"是非法值,会导致自动换行配置失效。

优化后的可运行代码

from openpyxl import Workbook
from openpyxl.styles import Alignment, Font

wb = Workbook()
# 如果需要保留默认Sheet并格式化,注释掉下面两行,把ws_default加入months列表即可
ws_default = wb.active
wb.remove(ws_default)

# 批量创建月份工作表,无需逐个手动声明
month_names = ["January", "February", "March", "April", "May", "June", 
               "July", "August", "September", "October", "November", "December"]
months = [wb.create_sheet(name) for name in month_names]

# 提前定义复用样式,避免循环中重复创建实例提升效率
align_center = Alignment(horizontal="center", vertical="center", wrap_text=True)
font_15 = Font(size="15")

# 遍历所有工作表设置格式
for sheet in months:
    # 设置前32行行高
    for row in range(1, 33):
        sheet.row_dimensions[row].height = 30
    # 设置前3列单元格样式
    for row in range(1, 33):
        for col in range(1, 4):
            cell = sheet.cell(row, col)
            cell.alignment = align_center
            cell.font = font_15

wb.save("sample.xlsx")

代码优化说明

  • 去掉了不必要的numpy依赖,用Python原生列表存储工作表即可,减少额外库引入
  • 批量生成月份工作表,代码更简洁易维护
  • 样式对象提前复用,避免循环中重复创建相同的样式实例,运行效率更高
  • 修正了变量作用域错误,每个工作表单独遍历行号,不会出现行号累加错误
  • 修正了wrap_text的非法传参问题

如果需要保留默认生成的Sheet工作表并格式化,只需要删除删除Sheet的两行代码,调整months列表定义即可:

months = [ws_default] + [wb.create_sheet(name) for name in month_names]

内容的提问来源于stack exchange,提问作者volcaniceruption09845

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:36:10