如何在Odoo8下载xls文件?

时间:2017-03-20 13:25:24

标签: openerp odoo-8 xlwt

在主题中详细说明我需要一些关于下载xls文件的方法的解释。 在Odoo8上,通过向导我创建了一个xlwt文件,使用函数wb.save(filename)将其存储到文件系统。 但是,经过大量的谷歌搜索,我不能得到我需要的东西,我真的很难过...... 是否有人帮助我采取正确的方式?

1 个答案:

答案 0 :(得分:0)

这是下载xls文件的完美示例。

步骤1:在常规模型(向导)中创建一个方法并返回URL。

@api.multi 
def get_file(self):
    return {
             'type' : 'ir.actions.act_url',
             'url': '/web/binary/download_document?model=wizard.product.stock.report&field=datas&id=%s&filename=product_stock.xls'%(self.id),
             'target': 'self',
 }                

(就像您在/web/controllers/main.py中看到的文件一样)

步骤2:创建一个控制器类并捕获该URL并执行下载excel文件的过程。

    from openerp import http
    from openerp.http import request
    from openerp.addons.web.controllers.main import serialize_exception,content_disposition
    import base64
    class Binary(http.Controller):
     @http.route('/web/binary/download_document', type='http', auth="public")
     @serialize_exception
     def download_document(self,model,field,id,filename=None, **kw):
         """ Download link for files stored as binary fields.
         :param str model: name of the model to fetch the binary from
         :param str field: binary field
         :param str id: id of the record from which to fetch the binary
         :param str filename: field holding the file's name, if any
         :returns: :class:`werkzeug.wrappers.Response`
         """
         Model = request.registry[model]
         cr, uid, context = request.cr, request.uid, request.context
         fields = [field]
         res = Model.read(cr, uid, [int(id)], fields, context)[0]
         filecontent = base64.b64decode(res.get(field) or '')
         if not filecontent:
             return request.not_found()
         else:
             if not filename:
                 filename = '%s_%s' % (model.replace('.', '_'), id)
                 return request.make_response(filecontent,
                                [('Content-Type', 'application/octet-stream'),
                                 ('Content-Disposition', content_disposition(filename))])     

在上面的方法中,我从url获取了ID,然后应用了一些计算并从请求中返回http响应。无论我从向导传递给控制器​​方法的值是什么,我都会在控制器方法上获取它们,在控制器方法中,我将执行必要的处理并直接返回文件。

见下文,我已经从url

传递了模型,字段,id和文件名

/web/binary/download_document?model=wizard.product.stock.report&field=datas&id=%s&文件名= product_stock.xls

http://www.emiprotechnologies.com/technical_notes/odoo-technical-notes-59/post/how-to-download-any-file-on-button-click-244

使用上述方法,您可以创建xls,csv,txt任何文件。

谢谢,