EO中处理用户提交excel,返回结果
-
功能:用户上传excel,系统按照业务逻辑处理excel文件,结果文件返回给用户
非常感谢mrshelly帮助,已完成功能主线,总结如下,有问题请大家多多指点 ;D
1.上传文件在_columns里面使用fields.binary实现
'excel': fields.binary('File', filters='*.xls'),
2.在form view中使用button调用py中的方法,name属性对应方法名称
<button name="import_file" string="上传" type="object" class="oe_highlight" />
3.在py的import_file方法中获取上传的excel文件
this = self.browse(cr, uid, ids[0])
data=base64.decodestring(this.excel)
4.传递给xlrd,结合xlwt,xlutils进行自己的业务逻辑处理
rb = open_workbook(file_contents=data, formatting_info=True, on_demand=True)
wb = copy(rb)
...
s= StringIO.StringIO()
wb.save(s)
return s
5.保存处理结果到库中
out = base64.encodestring(s.getvalue())
self.write(cr, uid, ids, {'excel': out,...}, context=context)
6.返回到view中的指定视图
obj_model = self.pool.get('ir.model.data')
model_data_ids = obj_model.search(cr,uid,[('model','=','ir.ui.view'),('name','=','your_view_id')])
resource_id = obj_model.read(cr, uid, model_data_ids, fields=['res_id'])[0]['res_id']
return {
'type': 'ir.actions.act_window',
'res_model': 'your_model',
'view_mode': 'form',
'view_type': 'form',
'views': [(resource_id,'form')],
'res_id': this.id,
'target': 'new',
}
7.在view中提供下载链接给用户
<p>打开分析结果<field name="excel" readonly="1" filename="name"/></p>