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

openpyxl脚本向表格第二列追加数据时跳行问题求助

解决openpyxl中Module 2数据追加跳行问题

问题根源

你遇到的跳行问题,本质是错误使用了工作表全局的max_row来定位Module 2的起始写入行。由于Module 1和Module 2的列是交错存储的(A/C对应Module 1,B/D对应Module 2),全局最大行号会被Module 1的行数主导,导致Module 2的数据被追加到无意义的空白行后,而非B列的实际最后数据行。

修正方案

需要分别跟踪每个模块对应列的最后非空行,而非依赖全局行号:

1. 精准获取各模块的最后数据行

通过遍历目标列,找到该列最后一个有值的行号,以此作为下一次写入的起始位置。

2. 修正后的代码示例

from openpyxl import load_workbook

# 加载目标工作簿和工作表
wb = load_workbook('your_spreadsheet.xlsx')
ws = wb.active

# 定义工具函数:获取指定列的最后非空行号
def get_last_non_empty_row(ws, column_letter):
    for row_num in range(ws.max_row, 0, -1):
        if ws[f"{column_letter}{row_num}"].value is not None:
            return row_num
    return 0  # 列无数据时返回0

# 获取Module 1(A列)和Module 2(B列)的最后数据行
mod1_last_row = get_last_non_empty_row(ws, 'A')
mod2_last_row = get_last_non_empty_row(ws, 'B')

# 追加Module 1数据(示例值)
ws[f"A{mod1_last_row + 1}"] = "2024-05-20 14:00"
ws[f"C{mod1_last_row + 1}"] = 150

# 追加Module 2数据(示例值)
ws[f"B{mod2_last_row + 1}"] = "2024-05-20 14:01"
ws[f"D{mod2_last_row + 1}"] = 145

# 保存修改
wb.save('your_spreadsheet.xlsx')

3. 关键细节说明

  • 工具函数get_last_non_empty_row确保只针对目标列判断,避免其他列数据干扰
  • 当列无任何数据时(初始状态),会返回0,此时下一次写入行号为1,符合初始写入逻辑
  • 如果需要批量写入多行数据,只需在循环中递增对应模块的行号即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 16:46:13