导航栏

如何将数据导入Odoo

如何开始

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

打开要填充的对象的视图,然后单击 导入

系统提供了模板,您可以轻松地用自己的数据填充模板。 一键导入这些模板。 数据映射已经完成。

如何使用模板

  • 添加、删除或分类各行,使它们以最好的方式适应你的数据结构。
  • 建议不要删除 ID (原因见下节)。
  • 向下拖动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或LibreOffice Calc,因为它们允许修改全部三个选项( ‘另存为’对话框 ‣ 勾选’编辑筛选设置’ ‣ 保存)。

微软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文件

如果一个字段有多个匹配项,该怎么办?

例如,如果您有两个产品类别,其子名称为“可售”(即“其他产品/可售产品”和“其他产品/可售产品”),则验证将暂停,但您仍可以导入数据。 但是,我们建议您不要导入数据,因为它们都将链接到“产品类别”列表中的第一个“可售商品”类别(“其他产品/可售商品”)。 我们建议您修改重复项之一的值或您的产品类别层次结构。

但是,如果您不想更改产品类别的配置,建议您在此“类别”字段中使用外部ID。

如何导入多对多关系字段(例如,具有多个标签的客户)?

标签应以逗号分隔且没有任何间距。 例如,如果您希望将客户链接到标签“制造商”和“零售商”,那么您将在CSV文件的同一列中编码“制造商,零售商”。

制造商、零售商的CSV文件

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

如果你先导入包含多个订单行的销售订单;你需要在CSV文件中为每个订单行保留一个特定行。第一个订单行将按相对于订单的信息在同一行导入。所有其他订单行都需要一个额外的行,它在字段中没有相对于的订单的任何信息。例如,你可以根据演示数据导入某些报价的``purchase.order_functional_error_line_cant_adpat.CSV``文件。

某些报价的文件

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

采购订单及各自的订单行

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

客户及各自的联系人

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

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

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

如果我没有为特定字段提供值怎么办?

如果您未在CSV文件中设置所有字段,则Odoo将为每个未定义的字段分配默认值。 但是,如果您在CSV文件中将字段设置为空值,则Odoo会在该字段中设置 “空” 值,而不是分配默认值。

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

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

如要管理表单之间的关系,你可使用Odoo的“外部ID”工具。一条记录的“外部ID”是指这条记录在其他应用程序中的唯一标识符。“外部ID”必须在所有对象的所有记录中具备唯一性,因此在“外部ID”前面加上应用程序或表单名称是很好的习惯。(如“company_1’”或“person_1”,而不仅仅只有“1”)

举例来说,如果你的SQL数据库中有公司和人员两个需要导入的表单。每位人员属于一家公司,因此你必须重新创建人员与其所在公司之间的关联。(如你想测试本例,请使用:download:[UNKNOWN NODE problematic]PostgreSQL数据库的转储 <../../_static/example_files/database_import_test.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和Laurence在Bigees公司工作(company_1),Eric在Organi公司工作。人员与公司的关系通过公司的外部ID来确定。我们必须将表单名称作为“外部ID”的前缀,以免人员与公司的ID之间出现冲突(person_1和company_1在原始数据库中的ID都是1)。

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