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

使用OPENPYXL自动创建报表时出现数据重复堆叠问题如何解决

问题根因

你当前的代码只在程序启动时创建了1次全局的Workbook对象和工作表对象ws,每次调用reporteador函数时都是往同一个工作表里追加数据,所以保存的新报表自然会包含之前所有旧数据。另外你的代码还存在重复的死循环、报表命名规则可能导致同天报表覆盖的问题。

修改后可直接运行的代码

import pandas as pd
import time
import datetime
import openpyxl
from openpyxl import Workbook

def reporteador(año, mes, dia, hora, minuto):
    # 每次生成报表前创建全新的空白工作簿,避免历史数据累加
    wb = Workbook()
    ws = wb.active
    # 读取当前数据源并写入表头
    df = pd.read_csv("Data_cruda.csv")
    header = list(df.columns)
    ws.append(header)
    # 写入当前时间段对应的业务数据
    current_data = list(df.loc[0])
    ws.append(current_data)
    # 文件名增加时分后缀,避免同天生成的报表互相覆盖
    wb.save(f"Report_{año}{mes:02d}{dia:02d}_{hora:02d}{minuto:02d}.xlsx")

if __name__ == "__main__":
    last_minute = None
    while True:
        now = datetime.datetime.now()
        # 每分钟仅触发一次报表生成,避免重复执行
        if now.minute != last_minute:
            reporteador(now.year, now.month, now.day, now.hour, now.minute)
            last_minute = now.minute
        # 每秒校验一次时间,降低CPU占用
        time.sleep(1)

核心修改说明

  • 将Workbook和工作表的初始化逻辑移到reporteador函数内部,每次生成报表都创建全新的空白工作簿,从根源解决数据堆叠问题
  • 重构了原代码中混乱的多层嵌套死循环逻辑,改为每分钟仅触发一次报表生成,符合需求的同时避免重复执行
  • 文件名增加时分后缀,避免同一天生成的报表互相覆盖
  • 优化时间判断逻辑,大幅降低程序CPU占用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:24:00