1、创建一个向导模型:
from odoo import models, fields, api import base64 import xlwt from io import BytesIO class UserExport(models.TransientModel): _name = "user.export" _description = "导出成excel" file = fields.Binary('文件') def generate_excel(self, task_ids): workbook = xlwt.Workbook(encoding='utf-8') worksheet = workbook.add_sheet('任务清单') style = xlwt.XFStyle() # 初始化样式 font = xlwt.Font() # 为样式创建字体 font.name = '宋体' # 字体 font.bold = True # 加粗 font.height = 20 * 10 # 字体大小 style.font = font # 为样式设置字体 # 添加列的标题 header = ['姓名', '性别', '年龄'] for col in range(len(header)): worksheet.write(0, col, header[col], style) row = 1 for line in task_ids: worksheet.write(row, 0, line.name if line.name else '') worksheet.write(row, 1, line.sex if line.sex else '') worksheet.write(row, 2, line.age if line.age else '') row = row + 1 # 保存 buffer = BytesIO() workbook.save(buffer) return base64.encodebytes(buffer.getvalue()) def action_export_data(self): # 获取id context = dict(self._context or {}) task_ids = context.get('active_ids') # 查出数据 task_ids = self.env['demo.user'].browse(task_ids) # 调用自定义excel模板 res = self.create({'file': self.generate_excel(task_ids)}) file_name = 'DEMO_USER' excel_url = '/web/content?model=%s&id=%s&field=file&download=true&filename=%s.xls' % (self._name, res.id, file_name) value = dict( type = 'ir.actions.act_url', target = 'self', url = excel_url, ) return value
二、新建一个模型
# -*- coding: utf-8 -*- from odoo import api, fields, models, tools import os import base64 import logging class demo_user(models.Model): _name = 'demo.user' _description = '用户' name = fields.Char('姓名') sex = fields.Char('性别') age = fields.Integer('年龄')
三、在动作里添加按钮
<?xml version="1.0" encoding="utf-8"?> <odoo> <record id="excel_user_export_action" model="ir.actions.server"> <field name="name">导出Excel</field> <field name="model_id" ref="mo_sale.model_user_export"/> <field name="binding_model_id" ref="mo_sale.model_demo_user"/> <field name="state">code</field> <field name="code"> action = env['user.export'].action_export_data() </field> </record> </odoo>
创建action和menu
<?xml version="1.0" encoding="utf-8"?> <odoo> <data> <record id="demo_uesr_order_action" model="ir.actions.act_window"> <field name="name">Demo 用户</field> <field name="res_model">demo.user</field> <field name="view_mode">tree,form</field> </record> </data> </odoo>