You need to enable JavaScript to run this app. 使用xlwt库写Excel时如何从第二行开始写入避免覆盖表头
优惠活动
大模型
产品
解决方案
定价
更多

使用xlwt库写Excel时如何从第二行开始写入避免覆盖表头

问题原因
  • 核心是数据写入的行号计算逻辑错误:你用int(i/5)计算行号时默认从第0行开始写入,刚好覆盖了第0行存储的表头内容
  • 代码还存在变量拼写错误:定义表头行号时写的是rom_num=0,后续调用用的是row_num,会出现变量未定义的异常;且循环里的row_num += 1没有被用到写入逻辑中,属于无效代码
修复方案

表头已经占用了第0行,所有业务数据要从第1行开始写入,只需要在计算数据行号时额外加1做偏移即可,同时修正变量拼写问题。

修复后代码

import xlwt
from decimal import Decimal

wb = xlwt.Workbook(encoding='utf-8')
ws = wb.add_sheet('datas', cell_overwrite_ok=True)
# 表头加粗样式
head_style = xlwt.XFStyle()
head_style.font.bold = True

columns = ['col1', 'col2', 'col3', 'col4', 'col5']
row_num = 0 # 修正变量拼写错误
# 写入表头(占第0行)
for col_num in range(len(columns)):
    ws.write(row_num, col_num, columns[col_num], head_style)

# 业务数据样式
data_style = xlwt.XFStyle()
rows = [20, Decimal('50000.00'), Decimal('10.00'), Decimal('40000.00'), Decimal('90000.00'), 21, Decimal('31000.00'), Decimal('2000.00'), Decimal('41000.00'), Decimal('74000.00')]

for i,e in enumerate(rows):
    # 行号 = 表头占用的1行 + 数据本身的行索引
    cur_row = 1 + int(i/5)
    cur_col = int(i)%5
    ws.write(cur_row, cur_col, e, data_style)

wb.save('output.xls')

更易维护的写法建议

可以先把一维的业务数据按5个一组拆成二维数组,行号逻辑更清晰,不容易出错:

# 把一维数组按列数拆分,每行5个元素
row_datas = [rows[i:i+5] for i in range(0, len(rows), 5)]
# 行号从1开始写入,跳过表头所在的第0行
for row_idx, row_data in enumerate(row_datas):
    for col_idx, val in enumerate(row_data):
        ws.write(row_idx + 1, col_idx, val, data_style)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 18:42:04