如何解决odoo中的xlsx报告数据覆盖问题
我有一本存储在列表中的字典,该字典如下所示:
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
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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的问题可能是因为
row
在for row ,j in enumerate(res[i]['display']):
中的每个循环上更新,您只需更改你的代码有点:
Your problem is probably because the
row
being updated on each loop infor row ,j in enumerate(res[i]['display']):
You just need to change your code a bit: