Hello there,
I have been trying to import an excel into Odoo sale order line.
However, I get the following error message: https://ibb.co/bQSMbqH
The code looks as follow:
from odoo import api, fields, models
from odoo.exceptions import UserError, ValidationError
import logging
import tempfile
import binascii
from datetime import datetime
_logger = logging.getLogger(__name__)
try:
import xlrd
except ImportError:
_logger.debug('Cannot `import xlrd`.')
class ImportExcel(models.TransientModel):
_name = "import.excel.wizard"
_description = "Wizard to import excel data"
name = fields.Char(string='name of file')
data = fields.Binary('file')
def get_product(self, value):
product = self.env['product.template'].search([('name', '=', value)])
return product.id if product else False
def import_file(self):
_logger.debug("hello there people")
file_name = self.data.name.lower()
if file_name.strip().endswith('.xlsx'):
sale_order_view = False
if file_name.strip().endswith('.xlsx'):
try:
fp = tempfile.NamedTemporaryFile(delete=False, suffix=".xlsx")
fp.write(binascii.a2b_base64(self.data.datas))
fp.seek(0)
workbook = xlrd.open_workbook(fp.name)
sheet = workbook.sheet_by_index(0)
except:
raise UserError(_("Invalid file!"))
vals_list = []
for row_no in range(sheet.nrows):
val = {}
values = {}
if row_no <= 0:
fields = map(lambda row: row.value.encode('utf-8'), sheet.row(row_no))
_logger.debug("hello there people")
else:
line = list(map(lambda row: isinstance(row.value, bytes) and row.value.encode('utf-8') or str(row.value), sheet.row(row_no)))
values.update({
'product_id': self.get_product(line[0]),
'name': line[1],
'product_uom_qty': line[2]
})
vals_list.append((0, 0, values))
sale_order_values = {
'order_line': vals_list
}
if len(vals_list) != 0:
sale_order = self.env['sale.order'].search([('name', '=', self.env.context.get('active_id'))])
sale_order_view = sale_order.write(sale_order_values)
if sale_order_view:
return {
'type': 'ir.actions.act_window',
'res_model': 'sale.order',
'view_mode': 'form',
'res_id': sale_order_view.id,
'views': [(False, 'form')],
}
else: raise ValidationError(_("Unsupported File Type"))
Any help would be greatly appreciated.
Hi CorTax,
Thanks for your help. I have changed the line to the one you suggested. I do not get the error anymore.
But now the code raises UserError('couldnt create book object!').
the code is now the following:
Solved the issue. xlrd module doesn't work for xlsx files anymore.