odoo生成excel

odoo生成excel

记录一下odoo中数据生成excel数据,直接看以下代码

    def generate_excel_attachment(self):
        # 创建Excel工作簿和工作表
        workbook = xlwt.Workbook()
        worksheet = workbook.add_sheet('excel数据')

        # 设置表头行高
        header_row_height = 38  # 行高为38
        worksheet.row(0).height_mismatch = True
        worksheet.row(0).height = 31 * 20  # 行高以20为基准
        worksheet.row(1).height_mismatch = True
        worksheet.row(1).height = header_row_height * 20  # 行高以20为基准
        worksheet.row(1).height_mismatch = True
        worksheet.row(1).height = header_row_height * 20  # 行高以20为基准

        # 设置合并后的单元格居中和字体大小
        alignment = xlwt.Alignment()
        alignment.horz = xlwt.Alignment.HORZ_CENTER
        alignment.vert = xlwt.Alignment.VERT_CENTER
		# 设置字体
        font = xlwt.Font()
        font.height = 20 * 12
        font.bold = True

        style = xlwt.XFStyle()
        style.alignment = alignment
        style.font = font

        style_borders = xlwt.Borders()
        style_borders.left = xlwt.Borders.THIN
        style_borders.right = xlwt.Borders.THIN
        style_borders.top = xlwt.Borders.THIN
        style_borders.bottom = xlwt.Borders.THIN
        style.borders = style_borders

        # worksheet.write(0, 0, '合并单元格', style)
        worksheet.write_merge(0, 0, 0, 16, 'excel数据', style)

        # 创建表头样式
        header_style = xlwt.XFStyle()
        header_font = xlwt.Font()
        header_font.bold = True
        header_style.font = header_font
        header_style.alignment.horz = xlwt.Alignment.HORZ_CENTER
        header_style.alignment.vert = xlwt.Alignment.VERT_CENTER

        # 设置表头背景色
        header_pattern = xlwt.Pattern()
        header_pattern.pattern = xlwt.Pattern.SOLID_PATTERN
        header_pattern.pattern_fore_colour = xlwt.Style.colour_map['gray25']
        header_style.pattern = header_pattern

        # 设置表头边框
        header_borders = xlwt.Borders()
        header_borders.left = xlwt.Borders.THIN
        header_borders.right = xlwt.Borders.THIN
        header_borders.top = xlwt.Borders.THIN
        header_borders.bottom = xlwt.Borders.THIN
        header_style.borders = header_borders

        # 在Excel工作表中写入数据
        head = ["标题名称...."]
        for i in head:
            worksheet.write(1, head.index(i), i, header_style)

        # 列宽
        column_width = 15
        for i in range(len(head)):
            worksheet.col(i).width = column_width * 256  # 列宽以256为基准

        # 创建内容样式
        content_style = xlwt.XFStyle()

        # 设置内容数据边框
        content_borders = xlwt.Borders()
        content_borders.left = xlwt.Borders.THIN
        content_borders.right = xlwt.Borders.THIN
        content_borders.top = xlwt.Borders.THIN
        content_borders.bottom = xlwt.Borders.THIN
        content_style.borders = content_borders

        # 居中
        content_font = xlwt.Font()
        content_style.font = content_font
        content_style.alignment.horz = xlwt.Alignment.HORZ_CENTER
        content_style.alignment.vert = xlwt.Alignment.VERT_CENTER

        # 添加内容
        row = 1
        excel_records = self.excel_ids.sorted(key=lambda r: r.dep_id)
        for record in excel_records:
            row += 1
            worksheet.write(row, 0, record.name, content_style)
            ...

        # 设置换行样式
        style_merge = xlwt.XFStyle()
        alignment = xlwt.Alignment()
        alignment.wrap = 1  # 自动换行
        alignment.vert = xlwt.Alignment.VERT_TOP
        style_merge.alignment = alignment

        style_font_merge = xlwt.Borders()
        style_font_merge.left = xlwt.Borders.THIN
        style_font_merge.right = xlwt.Borders.THIN
        style_font_merge.top = xlwt.Borders.THIN
        style_font_merge.bottom = xlwt.Borders.THIN
        style_merge.borders = style_font_merge

        # 在单元格内使用\n进行换行
        text_with_newline = """字段说明:
        1.统计范围:统计说明"""
        s_merge = len(self.excel_ids)
        worksheet.write_merge(s_merge+2, s_merge+11, 0, 16, text_with_newline, style_merge)

        # 将Excel数据保存到BytesIO对象中
        excel_file = BytesIO()
        workbook.save(excel_file)

        # 创建附件并将Excel数据附加到附件中
        attachment = self.env['ir.attachment'].create({
            'name': '生成excel数据.xls',
            'datas': base64.encodebytes(excel_file.getvalue()),
            'mimetype': 'application/vnd.ms-excel',
            'res_model': model,
            'res_id': self.id,
        })

        # 下载
        # return {
        #     'type': 'ir.actions.act_url',
        #     'url': '/web/content/%s?download=true' % (attachment.id),
        #     'target': 'self',
        # }
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值