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

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

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

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

[分享]销售订单从Excel导入模版



  • 本着开源共享的精神,现将我们已经用了很成熟的销售订单从Excel导入模版做成一个Demo模块共享给大家,搞懂了这个,其他的什么采购订单,员工信息之类的都可以用类似的方法完成.废话不多说,简要给大家介绍一下代码的含义:<br /><br />1.首先定义要上传的字段,为bin类型:<br />[code]<br />_columns={<br />      'data':fields.binary('File'), <br />}<br />[/code]<br /><br />2.然后在view里定义该字段并附件一个导入按钮:<br />[code]<br /><?xml version="1.0" encoding="utf-8"?><br /><openerp><br /> <data><br /> <record id="rainsoft_order_form" model="ir.ui.view"><br /> <field name="name">rainsoft.order.form</field><br /> <field name="model">sale.order</field><br /> <field name="inherit_id" ref="sale.view_order_form"/><br /> <field name="arch" type="xml"><br /> <xpath expr="//field[@name='order_line']" position="before"><br />   <group><br /> <group><br /> <field name='data'/><br /> </group>       <br /> <group>   <br /> <button name='import_file' string='Import' type='object' class='oe_edit_only' states="draft" /><br /> </group><br />   </group><br /> </xpath><br /> </field><br /> </record><br /> </data><br /></openerp><br />[/code]<br /><br />3.在相应的py文件中定义对这个button处理的逻辑,也就是我们要进行读取Excel并写入订单行的代码:<br />[code]<br />def import_file(self,cr,uid,ids,context=None):<br /> for wiz in self.browse(cr,uid,ids):<br /> if not wiz.data:continue<br /> excel = xlrd.open_workbook(file_contents=base64.decodestring(wiz.data))<br /> sheets = excel.sheets()<br /> for sh in sheets:<br /> if sh.name:<br /> lines=[]<br /> for row in range(1,sh.nrows):<br /> if sh.cell(row,1).value and sh.cell(row,5).value:<br /> product_no = int(str(sh.cell(row,1).value).strip().split('.')[0])<br /> product_amount=sh.cell(row,5).value<br /> product_price =sh.cell(row,6).value<br /> product_method=sh.cell(row,12).value<br /> if product_method == u'订单':<br /> product_method='make_to_order'<br /> else:<br /> product_method='make_to_stock'<br />     <br /> products = self.pool.get('product.product').search(cr,uid,[('default_code','=',product_no)],context=context)<br /> _logger.info("importing product_no:"+str(product_no)+";products:"+str(products))<br /> if len(products)>0 and product_amount>0 and product_amount:<br /> product = self.pool.get('product.product').browse(cr,uid,products[0],context=context)<br /> line={<br /> 'order_id':ids[0],<br /> 'name':product.name,<br /> 'product_id':product.id,<br /> 'price_unit':product_price,<br /> 'product_uom':product.uom_id.id,<br /> 'product_uom_qty':product_amount,<br /> 'type':product_method,<br /> 'state':'draft',<br /> }<br /> self.pool.get('sale.order.line').create(cr,uid,line,context)<br /> else:<br /> _logger.info("product insert failed. No:"+str(product_no))<br /> _logger.info("probably caused by 1.len(products):"+str(len(products))+",2.product_amount:"+str(product_amount))<br /> else:<br /> _logger.info('row 1 and row 5 is invalid! Error Column 1:'+str(sh.cell(row,1).value)+";Error Column 2:"+str(sh.cell(row,5).value))<br />[/code]<br /><br />导入Excel这里用到的是xlrd库,效果见附件图<br /><br />Demo地址(附带Excel文件):https://github.com/kevin8909/sale_from_excel



  • 本着开源共享的精神,现将我们已经用了很成熟的销售订单从Excel导入模版做成一个Demo模块共享给大家,搞懂了这个,其他的什么采购订单,员工信息之类的都可以用类似的方法完成.废话不多说,简要给大家介绍一下代码的含义:<br /><br />1.首先定义要上传的字段,为bin类型:<br />[code]<br />_columns={<br />      'data':fields.binary('File'), <br />}<br />[/code]<br /><br />2.然后在view里定义该字段并附件一个导入按钮:<br />[code]<br /><?xml version="1.0" encoding="utf-8"?><br /><openerp><br /> <data><br /> <record id="rainsoft_order_form" model="ir.ui.view"><br /> <field name="name">rainsoft.order.form</field><br /> <field name="model">sale.order</field><br /> <field name="inherit_id" ref="sale.view_order_form"/><br /> <field name="arch" type="xml"><br /> <xpath expr="//field[@name='order_line']" position="before"><br />   <group><br /> <group><br /> <field name='data'/><br /> </group>       <br /> <group>   <br /> <button name='import_file' string='Import' type='object' class='oe_edit_only' states="draft" /><br /> </group><br />   </group><br /> </xpath><br /> </field><br /> </record><br /> </data><br /></openerp><br />[/code]<br /><br />3.在相应的py文件中定义对这个button处理的逻辑,也就是我们要进行读取Excel并写入订单行的代码:<br />[code]<br />def import_file(self,cr,uid,ids,context=None):<br /> for wiz in self.browse(cr,uid,ids):<br /> if not wiz.data:continue<br /> excel = xlrd.open_workbook(file_contents=base64.decodestring(wiz.data))<br /> sheets = excel.sheets()<br /> for sh in sheets:<br /> if sh.name:<br /> lines=[]<br /> for row in range(1,sh.nrows):<br /> if sh.cell(row,1).value and sh.cell(row,5).value:<br /> product_no = int(str(sh.cell(row,1).value).strip().split('.')[0])<br /> product_amount=sh.cell(row,5).value<br /> product_price =sh.cell(row,6).value<br /> product_method=sh.cell(row,12).value<br /> if product_method == u'订单':<br /> product_method='make_to_order'<br /> else:<br /> product_method='make_to_stock'<br />     <br /> products = self.pool.get('product.product').search(cr,uid,[('default_code','=',product_no)],context=context)<br /> _logger.info("importing product_no:"+str(product_no)+";products:"+str(products))<br /> if len(products)>0 and product_amount>0 and product_amount:<br /> product = self.pool.get('product.product').browse(cr,uid,products[0],context=context)<br /> line={<br /> 'order_id':ids[0],<br /> 'name':product.name,<br /> 'product_id':product.id,<br /> 'price_unit':product_price,<br /> 'product_uom':product.uom_id.id,<br /> 'product_uom_qty':product_amount,<br /> 'type':product_method,<br /> 'state':'draft',<br /> }<br /> self.pool.get('sale.order.line').create(cr,uid,line,context)<br /> else:<br /> _logger.info("product insert failed. No:"+str(product_no))<br /> _logger.info("probably caused by 1.len(products):"+str(len(products))+",2.product_amount:"+str(product_amount))<br /> else:<br /> _logger.info('row 1 and row 5 is invalid! Error Column 1:'+str(sh.cell(row,1).value)+";Error Column 2:"+str(sh.cell(row,5).value))<br />[/code]<br /><br />导入Excel这里用到的是xlrd库,效果见附件图<br /><br />Demo地址(附带Excel文件):https://github.com/kevin8909/sale_from_excel



  • OE现有的 csv 导入已经做得相当不错了..<br /><br />建议 将 xls 文件导入部分hook到 csv 文件导入中去....



  • [quote author=mrshelly link=topic=16663.msg29199#msg29199 date=1413851267]<br />OE现有的 csv 导入已经做得相当不错了..<br /><br />建议 将 xls 文件导入部分hook到 csv 文件导入中去....<br />[/quote]<br /><br />但是csv文件的导入对业务人员来说太不友好,这样只是为了方便业务人员的日常操作.



  • 同意楼主的意见,从操作上考虑,确实是直接以Excel导入到系统最好,用户的接受度比较高,值得推荐。<br />感谢分享。


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待