如何将数据导入Odoo

如何开始

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

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

../../../_images/import_button.png

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

如何使用模板

  • 添加、删除或分类各行,使它们以最好的方式适应你的数据结构。

  • 建议不要删除**ID** 1(原因见下节)

  • 将ID排序下拉,为每个记录设置一个独一无二的ID。

../../../_images/dragdown.gif
  • 添加新一行时,如果这个行的标签与系统中任何字段均不匹配,Odoo可能不会自动将其映射。因此,请通过搜索查找对应的字段。

    ../../../_images/field_list.png

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

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

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

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

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

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

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

../../../_images/field_list.png

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

Odoo可自动检测特定列是否为日期,并且它还将从一组最常用的日期格式中猜测使用的日期格式。尽管这一过程可用于很多日期格式,但某些日期格式却无法识别。月和日倒置可能引起混淆;对于“01-03-2016”这样的格式,我们很难判断哪部分代表月份,哪部分代表日期。

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

注解

如你导入一个Excel(.xls, .xlsx)文件,可使用日期单元格存放日期(因为在Excel中日期的显示与存储方式不一致)。这样当你在Odoo中找到一个日期就可以确保它是正确的格式。

我可以输入带有货币符号的号码(例如:$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 file for categories.

CSV file for Products.

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

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

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

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

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

CSV file for Manufacturer, Retailer

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

If you want to import sales order having several order lines; for each order line, you need to reserve a specific row in the CSV file. The first order line will be imported on the same row as the information relative to order. Any additional lines will need an additional row that does not have any information in the fields relative to the order. As an example, here is purchase.order_functional_error_line_cant_adpat.CSV file of some quotations you can import, based on demo data.

File for some Quotations.

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

Purchase orders with their respective purchase order lines.

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

Customers and their respective contacts.

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

If you import a file that contains one of the column “External ID” or “Database ID”, records that have already been imported will be modified instead of being created. This is very useful as it allows you to import several times the same CSV file while having made some changes in between two imports. Odoo will take care of creating or modifying each record depending if it’s new or not.

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

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

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

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

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

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

As an example, suppose you have a SQL database with two tables you want to import: companies and persons. Each person belong to one company, so you will have to recreate the link between a person and the company he work for. (If you want to test this example, here is a dump of such a PostgreSQL database)

首先会导出全部公司及其”外部 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和Laurence在Bigees公司工作(company_1),Eric在Organi公司工作。人员与公司的关系通过公司的外部ID来确定。我们必须将表单名称作为“外部ID”的前缀,以免人员与公司的ID之间出现冲突(person_1和company_1在原始数据库中的ID都是1)。

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