以下代码是我在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)
答案 0 :(得分:1)
根据您的说明,您似乎期望csv.DictReader
能够处理.xlsx
文件。但这与.csv
文件完全不同。 Excel可以打开它们这两个事实并不意味着它们可以互换,或者某种程度上是相同的。
您可以尝试使用模块xlrd
。但这将是一个完全不同的实施;该模块不会为csv.DictReader
提供替代品。
唯一的替代方法是预处理.xlsx
文件并将其转换为代码所需的.csv
。您可以使用xlrd
,或者您可以在Excel中编写VBA宏来执行此操作;实际上可能有十几种方法可以做到。
答案 1 :(得分:0)
您可以尝试实施以下代码,来源XLS to Dict Reader using xlrd
out