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

如何用Python循环设置Excel F列单元格为文本格式?

解决openpyxl循环设置F列单元格格式时的合并单元格错误

问题根源

遍历单元格时碰到了合并单元格,MergedCell对象没有column_letter属性,而且合并单元格只有左上角的单元格是正常Cell对象,其余都是MergedCell占位对象,直接访问属性会触发报错。

可行实现方案

方案1:直接定位目标列范围(推荐)

不用遍历所有单元格,直接针对F列(第6列)的1-20行操作,高效避开合并单元格的问题:

from openpyxl import load_workbook
from openpyxl.styles import numbers

# 加载目标工作簿和工作表
wb = load_workbook("你的文件.xlsx")
ws = wb.active

# 遍历F列第1到20行
for row_num in range(1, 21):
    # 通过单元格坐标获取对象
    cell = ws[f"F{row_num}"]
    # 仅处理拥有格式属性的普通单元格
    if hasattr(cell, "number_format"):
        cell.number_format = numbers.FORMAT_TEXT

# 保存修改后的文件
wb.save("修改后的文件.xlsx")

也可以用列索引(F列对应索引6)的写法,效果完全一致:

for row_num in range(1, 21):
    cell = ws.cell(row=row_num, column=6)
    if hasattr(cell, "number_format"):
        cell.number_format = numbers.FORMAT_TEXT

方案2:遍历指定区域并过滤合并单元格

如果需要遍历特定区域,先判断单元格类型再执行操作:

from openpyxl import load_workbook
from openpyxl.styles import numbers

wb = load_workbook("你的文件.xlsx")
ws = wb.active

# 精准遍历F列1-20行的区域
for row in ws.iter_rows(min_row=1, max_row=20, min_col=6, max_col=6):
    for cell in row:
        # 跳过合并单元格占位对象,只处理普通单元格
        if not isinstance(cell, ws.merged_cells.merged_cell_class):
            cell.number_format = numbers.FORMAT_TEXT

wb.save("修改后的文件.xlsx")

补充说明

合并单元格的样式仅需设置左上角的单元格即可,其余合并单元格会自动继承该样式,无需额外处理MergedCell对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:50:26