odoo 导入 .xlsx sale_order, purchase_order

odoo import .xlsx sale_order, purchase_order

我在这里要做的是将 .xlsx 文件导入 sale_order 下面的代码解释了我是如何使用 csv.DictReader() 做到这一点的。为了让它在 .xlsx 文件上工作,我发现 XLS to Dict Reader using xlrd,但我不知道如何实现它。

ps:我是 python 和 odoo 10

的新手
file_data = fields.Binary('Archive', required=True,)

def import_button(self):
    file_path = tempfile.gettempdir()+'/file.csv'
    data = self.file_data
    f = open(file_path,'wb')
    f.write(data.decode('base64'))
    f.close() 
    archive = csv.DictReader(open(file_path),delimiter=';')

    archive_lines = []
    for line in archive:
        archive_lines.append(line)

Edit: i did use that function XLSDictReader :

> archive = XLSDictReader(open(file_path))

and I got this error 'import.purchase.order' object has no attribute 'fileno'

一直在用xlrd,谢谢@Datanovice先生的帮助

def import_button(self):
    file_path = tempfile.gettempdir()+'/file.xls'
    data = self.file_data
    f = open(file_path,'wb')
    f.write(data.decode('base64'))
    f.close() 

    workbook = xlrd.open_workbook(file_path)
    workbook = xlrd.open_workbook(file_path, on_demand = True)
    worksheet = workbook.sheet_by_index(0)
    first_row = [] # The row where we stock the name of the column
    for col in range(worksheet.ncols):
        first_row.append( worksheet.cell_value(0,col) )
    # transform the workbook to a list of dictionaries
    archive_lines = []
    for row in range(1, worksheet.nrows):
        elm = {}
        for col in range(worksheet.ncols):
            elm[first_row[col]]=worksheet.cell_value(row,col)

        archive_lines.append(elm)