Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

【分享】excel表格上传处理与生成下载



  • 公司要把以前的excel表格上传到OE的数据库中,还要要求能够导出来,忙了一个多月,现在终于有点眉目了,特分享给大家
    要把excel表格传到OE中显示,首先是要在OE中生成一个form视图,用来对应excel表格的数据,要想做出格式对应excel表格的视图,请参考我之前帖子:<br / [检测到链接无效,已移除] br /> [检测到链接无效,已移除]
    然后就是上传了,经@乌鲁木齐-兰迪提示,建立一个模型,其中一个字段是binary即可,具体教程:
    http://www.cnblogs.com/chjbbs/p/3543025.html
    然后在form视图中调用该字段即可,局部编码:
    .py文件:

    _columns = {<br />		&#039;excel&#039;: fields.binary(&#039;excel&#039;, filters=&#039;*.xls&#039;),<br />		&#039;month_smtqc_statistical_table&#039;:fields.char( u&#039;月份&#039;,size=64,select=True),<br />	}
    


    .xml文件:

    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;form string=&quot;上传表单&quot; version=&quot;7.0&quot;&gt;<br />					&lt;group&gt;<br />						&lt;field name=&quot;month_smtqc_statistical_table&quot;/&gt;<br />						&lt;field name=&quot;excel&quot;/&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  &lt;/group&gt;
    


    效果图见附件。
    调用和处理该上传的excel表格的教程: [检测到链接无效,已移除]
    另做了个实验,用xled来读取xlsx格式的excel表格也没有问题。
    关于下载,[glow=red,2,300]石家庄-老刘[/glow]给的方案,在目录openerp\addons\web\static\ 下面再建个目录, 比如123, 然后在里放个文件 , 比如456.txt, 然后就可以这样访问了 http://127.0.0.1:8069/web/static/123/456.txt, 不需要身份验证, 只要知道文件名就行。 这也是一个方法。 安全性稍差
    这样把链接写到form视图里调用即可完成从服务器上下载生成好的excel表格的任务。
    至于如何把数据库中的数据导出成excel表格,这个还没找到教程,先把我会的发出来,等找到后再补发。



  • 完整模仿好那个翻译导入导出 ,可以完美解决类似问题



  • [quote author=dw250100785 link=topic=16432.msg28157#msg28157 date=1402296569]
    完整模仿好那个翻译导入导出 ,可以完美解决类似问题
    [/quote]

    说过了几遍,他不听



  • [quote author=ccdos link=topic=16432.msg28158#msg28158 date=1402296965]
    [quote author=dw250100785 link=topic=16432.msg28157#msg28157 date=1402296569]
    完整模仿好那个翻译导入导出 ,可以完美解决类似问题
    [/quote]

    说过了几遍,他不听
    [/quote]

    我真的看了好几遍啊好几遍,真的还没有看懂。。目前有解决方案可以用就暂时用了现在的,翻译导入导出我还会再看,直到看懂为止。。



  • 上传的excel文件在内存里就能打开操作。

    <br /><br />for wiz in self.browse(cr,uid,ids):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not wiz.excel: continue<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; excel = xlrd.open_workbook(file_contents=base64.decodestring(wiz.excel))<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sh = excel.sheet_by_index(0)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for rx in range(sh.nrows):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &#039;processing line &#039;, rx<br />...<br /><br />
    



    如果想生成excel文件并下载(参考下载翻译那个wizard一样,两个state: choose, get, 然后利用binary field,提供给用户下载的连接出来):

    <br /><br />#.....从数据库取数据,计算,blahblah<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; book = xlwt.Workbook(encoding=&#039;utf-8&#039;)<br />&nbsp; &nbsp; &nbsp; &nbsp; sheet = book.add_sheet(u&#039;统计&#039;)<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; buf=cStringIO.StringIO()<br />&nbsp; &nbsp; &nbsp; &nbsp; book.save(buf)<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; out=base64.encodestring(buf.getvalue())<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; self.write(cr, uid, ids, {&#039;state&#039;:&#039;get&#039;, &#039;data&#039;:out, &#039;name&#039;:this.name }, context=context)<br /><br /><br />