You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

解决Odoo中多部门选择时XLSX报表数据覆盖问题

解决Odoo XLSX报表数据覆盖问题

我一眼就揪出问题所在了!咱们来拆解下:

你现在的行号处理逻辑有bug——遍历每个部门的休假记录时,用enumerate(res[i]['display'])生成的row变量,每个部门都会从0开始计数,然后写入row+2的位置。这就导致第二个部门的记录直接从第2行(也就是第一个部门的起始行)开始写,把第一个部门的记录彻底覆盖了,这就是为啥你只看到8条(第一个部门的数量)而不是预期13条的原因。另外你末尾写的row + 1i+1完全无效,因为没有赋值操作,不过这不是核心问题。

修复方案

你需要维护一个全局的行计数器,让所有部门的记录依次往下衔接,而不是每个部门都从头开始:

# 初始化起始行,对应你原来的row+2(索引2对应第3行)
current_row = 2
for dept_data in res:
    print(dept_data)
    print(len(dept_data['display']))
    for j in dept_data['display']:
        print(j)
        print("jenan")
        col = 0
        sheet.write(current_row, col, j.department_id.name, format2)
        sheet.write(current_row, col + 1, j.employee_id.name, format2)
        sheet.write(current_row, col + 2, j.date_from, format)
        sheet.write(current_row, col + 3, j.date_to, format)
        sheet.write(current_row, col + 4, j.holiday_status_id.name, format2)
        # 写完一条记录后,行号自增,确保下一条写到下一行
        current_row += 1

为什么这样能解决问题?

  • current_row统一追踪当前写入的行号,初始值设为你原来的起始行索引2
  • 每写完一条休假记录就把行号加1,让后续记录自动衔接在上一条的下方
  • 去掉了每个部门内部的enumerate生成row的逻辑,彻底避免了部门间行号重复覆盖的问题

修改后,第一个部门的8条记录会写到第3到第10行,第二个部门的5条会接着写到第11到第15行,不会再出现覆盖,你就能拿到预期的13条记录啦!

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

火山引擎 最新活动