通过Python脚本在Odoo中导入xlsx文件

时间:2017-05-02 10:22:39

标签: python import odoo-9

以下代码是我在Odoo中按导入产品按钮时执行的功能。此脚本从csv文件导入Odoo中的产品。可以先上载csv文件,然后单击导入按钮。 我不能做的是,当我上传xlsx文件并单击导入时,我收到警告该文件无效。 有人可以帮助我如何启用从xlsx文件导入?

@api.one
def action_import(self):
    ctx = self._context
    data = base64.b64decode(self.data)
    file_input = cStringIO.StringIO(data)
    file_input.seek(0)
    row = []
    result = {}
    if self.delimeter:
        delimeter = str(self.delimeter)
    else:
        delimeter = ','
    fieldnames = ['supplier_default_code', 'name', 'product_brand', 'supplier', 'standard_price', 'list_price',
                  'internal_category', 'spare_part', 'service_part', 'default_code', 'supplierinfo_product_name',
                  'rrp_price', 'min_qty', 'weight', 'net_weight', 'volume', 'height', 'width', 'depth', 'delay',
                  'warranty_type', 'warranty', 'sale_delay', 'description', 'description_sale',
                  'description_delivery', 'ean']
    reader = csv.DictReader(file_input, delimiter=delimeter, fieldnames=fieldnames)
    try:
        row.extend(reader)
    except Exception:
        raise exceptions.Warning(_("Not a valid file!"))
    keys = row[0]
    self.create_products_from_array(row)

2 个答案:

答案 0 :(得分:1)

根据您的说明,您似乎期望csv.DictReader能够处理.xlsx文件。但这与.csv文件完全不同。 Excel可以打开它们这两个事实并不意味着它们可以互换,或者某种程度上是相同的。

您可以尝试使用模块xlrd。但这将是一个完全不同的实施;该模块不会为csv.DictReader提供替代品。

唯一的替代方法是预处理.xlsx文件并将其转换为代码所需的.csv。您可以使用xlrd,或者您可以在Excel中编写VBA宏来执行此操作;实际上可能有十几种方法可以做到。

答案 1 :(得分:0)

您可以尝试实施以下代码,来源XLS to Dict Reader using xlrd

out