如何解决odoo中的xlsx报告数据覆盖问题

发布于 2025-01-20 13:18:35 字数 1547 浏览 2 评论 0原文

我有一本存储在列表中的字典,该字典如下所示:

res = []
if 'depts' in data:
    for department in self.env['hr.department'].browse(data['depts']):
        res.append(
            {
                'dept': department.name,
                'display': self.get_all_date(data['data'],department.id)

            })

当我尝试在 xlsx 工作表中打印数据时,当我选择多个部门时,数据会被覆盖。这是我的 for 循环打印报告:

i = 0
row = 0
for i in range(len(res)):
    print(res[i])
    print(len(res[i]['display']))
    for row ,j in enumerate(res[i]['display']):
        print(j)
        print("jenan")
        col = 0
        sheet.write(row + 2, col, j.department_id.name, format2)
        sheet.write(row + 2, col + 1, j.employee_id.name, format2)
        sheet.write(row + 2, col + 2, j.date_from, format)
        sheet.write(row + 2, col + 3, j.date_to, format)
        sheet.write(row + 2, col + 4, j.holiday_status_id.name, format2)
        row + 1
    i+1

这是 python 控制台中的输出,用于检查 for 循环是否正常工作。从输出中我很确定它正在工作,我不知道打印报告时出现什么问题:

{'dept': 'Management', 'display': hr.leave(26, 3, 4, 11, 2, 7, 8, 1)}
8
hr.leave(26,)
jenan
hr.leave(3,)
jenan
hr.leave(4,)
jenan
hr.leave(11,)
jenan
hr.leave(2,)
jenan
hr.leave(7,)
jenan
hr.leave(8,)
jenan
hr.leave(1,)
jenan
{'dept': 'Sales', 'display': hr.leave(18, 15, 22, 19, 23)}
5
hr.leave(18,)
jenan
hr.leave(15,)
jenan
hr.leave(22,)
jenan
hr.leave(19,)
jenan
hr.leave(23,)
jenan

这是生成的 xlsx 报告,预计打印 13 页,但实际打印了 8 页

I have a dictionary stored in a list, this dictionary looks like:

res = []
if 'depts' in data:
    for department in self.env['hr.department'].browse(data['depts']):
        res.append(
            {
                'dept': department.name,
                'display': self.get_all_date(data['data'],department.id)

            })

When I try to print the data in xlsx sheet, when I select more than one department the data is overwritten. This is my for loop to print report:

i = 0
row = 0
for i in range(len(res)):
    print(res[i])
    print(len(res[i]['display']))
    for row ,j in enumerate(res[i]['display']):
        print(j)
        print("jenan")
        col = 0
        sheet.write(row + 2, col, j.department_id.name, format2)
        sheet.write(row + 2, col + 1, j.employee_id.name, format2)
        sheet.write(row + 2, col + 2, j.date_from, format)
        sheet.write(row + 2, col + 3, j.date_to, format)
        sheet.write(row + 2, col + 4, j.holiday_status_id.name, format2)
        row + 1
    i+1

Here is the output in python console to check if the for loop is working or not. From the output I am pretty sure it is working, I don't know what the problem is when printing the report:

{'dept': 'Management', 'display': hr.leave(26, 3, 4, 11, 2, 7, 8, 1)}
8
hr.leave(26,)
jenan
hr.leave(3,)
jenan
hr.leave(4,)
jenan
hr.leave(11,)
jenan
hr.leave(2,)
jenan
hr.leave(7,)
jenan
hr.leave(8,)
jenan
hr.leave(1,)
jenan
{'dept': 'Sales', 'display': hr.leave(18, 15, 22, 19, 23)}
5
hr.leave(18,)
jenan
hr.leave(15,)
jenan
hr.leave(22,)
jenan
hr.leave(19,)
jenan
hr.leave(23,)
jenan

this is the xlsx report that was generated, expected to print 13 leaves but it prints 8 leaves

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

内心激荡 2025-01-27 13:18:35

您的问题可能是因为 rowfor row ,j in enumerate(res[i]['display']): 中的每个循环上更新,

您只需更改你的代码有点:

i = 0
row = 0
for i in range(len(res)):
    print(res[i])
    print(len(res[i]['display']))
    # this is the problem, the variable row is being updated on each loop
    # for row ,j in enumerate(res[i]['display']): 
    for j in res[i]['display']:
        print(j)
        print("jenan")
        col = 0
        sheet.write(row + 2, col, j.department_id.name, format2)
        sheet.write(row + 2, col + 1, j.employee_id.name, format2)
        sheet.write(row + 2, col + 2, j.date_from, format)
        sheet.write(row + 2, col + 3, j.date_to, format)
        sheet.write(row + 2, col + 4, j.holiday_status_id.name, format2)
        row + 1
    # i+1 no need for this, i is already being updated on each loop

Your problem is probably because the row being updated on each loop in for row ,j in enumerate(res[i]['display']):

You just need to change your code a bit:

i = 0
row = 0
for i in range(len(res)):
    print(res[i])
    print(len(res[i]['display']))
    # this is the problem, the variable row is being updated on each loop
    # for row ,j in enumerate(res[i]['display']): 
    for j in res[i]['display']:
        print(j)
        print("jenan")
        col = 0
        sheet.write(row + 2, col, j.department_id.name, format2)
        sheet.write(row + 2, col + 1, j.employee_id.name, format2)
        sheet.write(row + 2, col + 2, j.date_from, format)
        sheet.write(row + 2, col + 3, j.date_to, format)
        sheet.write(row + 2, col + 4, j.holiday_status_id.name, format2)
        row + 1
    # i+1 no need for this, i is already being updated on each loop
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文