Openerp 如何在Odoo8中下载xls文件?

Openerp 如何在Odoo8中下载xls文件?,openerp,odoo-8,xlwt,Openerp,Odoo 8,Xlwt,正如本主题中所详述的,我需要一些关于下载xls文件方法的说明。 在Odoo8上,我通过向导创建了一个xls文件,其中XLWTA使用函数wb.save(filename)将其存储到文件系统中。 但是,在谷歌搜索了很多次之后,我无法找到我需要的东西,我真的很难过。。。 有没有人能帮我找到正确的方法?这里是下载xls文件的完美例子 步骤1:在常规模型(向导)中创建一个方法并返回URL。 @api.multi def get_file(self): return {

正如本主题中所详述的,我需要一些关于下载xls文件方法的说明。 在Odoo8上,我通过向导创建了一个xls文件,其中XLWTA使用函数wb.save(filename)将其存储到文件系统中。 但是,在谷歌搜索了很多次之后,我无法找到我需要的东西,我真的很难过。。。
有没有人能帮我找到正确的方法?

这里是下载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&filename=product_stock.xls

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


谢谢,

您应该避免只在答案中发布链接。如果链接不再有效,会发生什么情况?这反过来会使你的答案无效…好吧,下次我会给你一个正确的例子。