跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. 【分享】excel表格上传处理与生成下载

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

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
6 帖子 4 发布者 4.4k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 阿 离线
    阿 离线
    阿狸
    写于 最后由 编辑
    #1

    公司要把以前的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表格,这个还没找到教程,先把我会的发出来,等找到后再补发。

    1 条回复 最后回复
    0
    • R 离线
      R 离线
      rufeng1199
      写于 最后由 编辑
      #2

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

      1 条回复 最后回复
      0
      • C 离线
        C 离线
        ccdos
        写于 最后由 编辑
        #3

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

        说过了几遍,他不听

        1 条回复 最后回复
        0
        • 阿 离线
          阿 离线
          阿狸
          写于 最后由 编辑
          #4

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

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

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

          1 条回复 最后回复
          0
          • D 离线
            D 离线
            d_yang
            写于 最后由 编辑
            #5

            上传的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 />
            
            1 条回复 最后回复
            0

            • 登录

            • 没有帐号? 注册

            • 登录或注册以进行搜索。
            • 第一个帖子
              最后一个帖子
            0
            • 版块
            • 标签
            • 热门
            • 用户
            • 群组