如何将数据导入Odoo

如何开始

可使用Excel (.xlsx) 或CSV (.csv) 格式导入Odoo业务对象的任何数据:联系人、产品、银行对账单、日记账条目、甚至订单!

打开你想要移植的对象并点击**导入**。

系统提供了模板,你可以轻松移植你自己的数据。只需点击一次即可导入这些模板。数据映射已经完成。

如何使用模板

  • 添加、删除或分类各行,使它们以最好的方式适应你的数据结构。
  • 建议不要删除**ID** 1(原因见下节)
  • 将ID排序下拉,为每个记录设置一个独一无二的ID。
  • 添加新一行时,如果这个行的标签与系统中任何字段均不匹配,Odoo可能不会自动将其映射。因此,请通过搜索查找对应的字段。

    然后使用你在导入模板上找到的标签,下次尝试导入的时候即可马上使用。

如何从其他应用程序中导入

为了在不同的记录之间重新创建关系,需将初始应用中唯一的标识符映射到Odoo中的**ID**(外部ID)行。导入与第一个记录相链接的其他记录时,使用到这个唯一标识符的**XXX/ID** (XXX/外部 ID)。也可以通过名称找到这个记录,但如果有至少2条同名的记录,可能会影响你的查找。

如你需要稍后重新导入修改后的数据,也可用更新**ID**初始导入。这在任何时候都是一个不错的办法。

我找不到想要映射的行的区域

Odoo试图基于文件的前10行找到文件内部各行的区域类型。例如,有一个只包含数字的行,只有**整数**类型的区域才显示供你选择。尽管这种方式可能在多数情况下都很合适,但也有可能出错,或者你希望将这些行映射到默认没有规划的区域中。

这时,你只需选择**显示关系区域的区域(高级)**选项,为每一行选择完整的区域列表。

在哪里修改数据导入格式?

Odoo可以自动判断一个行是否为日期,并尝试从一系列常用日期格式中判断正确的格式。这一进程可以支持多种日期格式,有一些国外的日期格式可能无法识别,它有可能无法判断(例如天数和月的位置),它难以判断哪一部分是日期,哪一部分是月份,如这样的格式:‘01-03-2016’。

要查看Odoo从你的文档中找到了哪些日期格式,可以在文档选择器下方的**选项**中点击**日期格式**。如果格式错误,你可以用*ISO 8601*修正格式。

我可以输入带有货币符号的号码(例如:$32.00)吗?

是的,我们完全支持用带圆括号的数字代表负数,以及带货币符号的数字。Odoo还可自动识别你使用的千分位分隔符、小数点(稍后可在**选项**中修改)。如Odoo不能识别你使用的货币符号,则该字段不会被识别为数字,可能导致出错。

支持的数字格式示例(如三万二千):

  • 32.000,00
  • 32000,00
  • 32,000.00
  • -32000.00
  • (32000.00)
  • $ 32.000,00
  • (32000.00 €)

不合要求的例子:

  • ABC 32.000,00
  • $ (32.000,00)

如果我导入的预览表无法正确显示该怎么办?

默认导入预览是用逗号作为字段分隔符,引号作为文本分隔符。如你的CSV文件没有这些设置,可以修改文件格式选项(你选择文件后,在浏览CSV文件块下显示)。

请注意,如果你的CSV文件将表格作为分隔符,Odoo将不能判断这整种分隔关系。你需要在电子表格的格式选项中更改设置。见下面的问题。

保存我的电子表格应用时,如何更改CSV文件格式选项?

如果在电子表格应用中编辑和保存CSV文件,你电脑的地区设置会应用分隔符。我们建立你使用OpenOffice或LibreOfice Calc,因此这些软件支持你修改全部三个选项(位于保存为会话框>勾选’编辑过滤器设置’>保存)。

Microsoft Excel仅在保存为会话框->点击工具下拉列表->编码时允许修改编码方式。

数据库ID和外部ID的差别是什么?

有些字段用于定义与其他对象的关系。例如,联系人的国家与“国家”这个对象的记录相链接。当你导入这些字段时,Odoo会在不同的记录中重新创建链接。Odoo提供了三种机制供你导入这些字段。每次导入一个字段时只能使用一种机制。

例如,在引用一个联系人的国别时,Odoo提供了三种不同的字段供你导入:

  • 国家:国家的名称或代码
  • 国家/数据库ID:某记录的唯一Odoo ID,由postgresql 行定义。
  • 国家/外部ID:其他应用(或导入的.XML文档)中引用的记录ID

对于比利时这个国家,你可以用以下三种方式中的任意一种导入:

  • 国家: 比利时
  • 国家/数据库ID:21
  • 国家/外部 ID: base.be

根据需要,你可以使用三种方式之一来引用关系中的记录。参照指引:

  • 使用国家:如果手动创建了CSV文件,则这是最快捷的导入方式。
  • 使用国家/数据库ID:你应该极少使用这一标识,主要是开发人员在使用。它的主要优势在于绝无冲突(你可能有多个重名的记录,但每个记录都有自己唯一的数据库ID)。
  • 使用国家/外部ID:从第三方应用中导入数据时,需要使用外部ID。

使用外部ID时,可利用带”外部ID”的行导入CSV文件,定义你导入的每条记录的外部ID号,然后引用类似”字段/外部ID”的记录。以下两个CSV文件是产品及目录的例子。

目录的CSV文档

产品的CSV文档

如果我有多对一的字段怎么做?

例如,你有两个带子名称的产品目录,”Sellable” (ie. “Misc. Products/Sellable” & “Other Products/Sellable”),你的确认被暂停了,但你仍然可以导入数据。不过我们建议你不要导入这些数据,因为它们可能都与产品目录列表 (“Misc. Products/Sellable”)中的第一个“可销售”目录相链接。我们建议你修改一个副本值或产品目录的层级。

不过,如果你不想更改产品目录的配置,我们建议你在“目录”字段使用外部ID。

如何导入多对多的关系字段(如一个顾客有多个tag)

这些tag可以用逗号分隔(中间无空格)。例如,如你想把顾客同时与“制造商”和“零售商”tag相链接,可以在CSV文件的同一行中编码”Manufacturer,Retailer”。

制造商和零售商的CSV文档

如何导入一对多的关系(例如多个订单行对应一个销售订单)?

如你希望导入有多个订单行的销售订单,则每个订单行都需要在CSV文件中保留一个特定的列。第一个订单行可被导入到与订单信息相关的同一列中。每添加一行,都需要向与订单相关的空信息字段中增加相应的行。例如可以基于demo数据导入一些引用的purchase.order_functional_error_line_cant_adpat.CSV文件。

一些引用的文件

以下CSV文档显示如何用各自的采购订单行导入订单:

带不同采购行的采购订单

以下CSV文件显示如何导入顾客及其联系人:

顾客和其各自的联系人

我可以导入多次相同的记录吗?

如你导入了一个包含”外部 ID”或”数据库 ID行的文件,已经导入的记录就会被修改而不是新创建记录。这是非常有用的,因为它允许你在两次导入之间多次导入同一个CSV文件。Odoo还支持对任一记录的创建或修改(视新旧而定)。

此功能允许你使用Odoo的导入/导出工具修改批记录,非常适合电子表格应用。

如果没有为特别字段赋值会有什么后果?

如果没有在CSV文件中设定全部字段,Odoo会向未定义的字段分配默认值。但是如果你在CSV文件中设置了空值,Odoo会在该字段设置EMPTY值,不再分配默认的值。

如何从一个SQL应用中向Odoo导出/导入不同的表单?

如要从不同的表单中导入数据,应在各个记录间重新创建属于不同表单的关系(即:如你导入公司和人员数据,需要在每个人及其服务的公司间重新创建链接。)

可以使用Odoo的”外部ID”功能管理不同表单之间的关系。”外部ID”是其他应用中该记录的唯一标识符。这一”外部ID”对全部对象的任一记录都必须是独一无二的,因此非常适合用这一应用或表单的名称为”外部ID”打前缀。(如’company_1’, ‘person_1’,而不是‘1’)。

例如,假设你有一个带两个表单的SQL数据库需要导入公司和个人,而每个人都属于一个公司,因此你需要在个人和其服务的公司之间重新创建链接。测试方法如下

首先会导出全部公司及其”外部 ID”。在PSQL环境中写入以下命令:

> copy (select 'company_'||id as "External ID",company_name as "Name",'True' as "Is a Company" from companies) TO '/tmp/company.csv' with CSV HEADER;
          

SQL命令将创建以下CSV文档:

External ID,Name,Is a Company
          company_1,Bigees,True
          company_2,Organi,True
          company_3,Boum,True
          

在PSQL环境中使用以下SQL命令为个人创建CSV文档并链接到对应的公司:

> copy (select 'person_'||id as "External ID",person_name as "Name",'False' as "Is a Company",'company_'||company_id as "Related Company/External ID" from persons) TO '/tmp/person.csv' with CSV
          

将产生以下CSV文档::

External ID,Name,Is a Company,Related Company/External ID
          person_1,Fabien,False,company_1
          person_2,Laurence,False,company_1
          person_3,Eric,False,company_2
          person_4,Ramsy,False,company_3
          

你可以看到Fabien和Laurece都是Bigees公司(company_1)的员工,Eric为Organi公司服务。个人和公司间的关系用公司的外部ID表示。我们只能用表单名称做为”外部 ID”的前缀,而避免个人ID和公司ID的冲突(person_1 和 company_1在原始数据库中共用ID 1。)

两个未经修改的文件已经就绪并导入Odoo。导入这两个CSV文件后,有4个联系人、3个公司(前两个联系人服务于同一公司)。你必须首先导入公司,然后导入人员。