Export and import data

Export data from Odoo

使用数据库时,有时必须将数据导出到不同的文件类型。 这样做可以帮助您对活动进行报告(即使Odoo 的每个应用程序都提供了精确而简单的报告工具)。

使用Odoo,您可以导出记录中任何字段的信息。 为此,在需要导出的项目上激活列表视图,单击 操作 ,然后单击 导出

view of the different things to enable/click to export data

很简单,此操作仍具有一些特殊情况。 实际上,当单击 导出 时,会出现一个弹出窗口,其中包含用于导出数据的多个选项:

overview of all the options to take into account when exporting data in Odoo
  1. 选中 我想更新数据 选项,系统仅显示可以导入的字段。 如果您想更新现有记录,这将非常有用。 基本上,这就像一个过滤器。 取消选中该框会提供更多的字段选项,因为它会显示所有字段,而不只是可以导入的字段。

  2. 导出时,可以选择两种格式:.csv 和 .xls。 使用 .csv,项目以逗号分隔,而.xls 包含有关文件中所有工作表的信息,如内容和格式。

  3. 这些是您可能要导出的项目。 使用箭头显示更多子字段选项。 当然,您可以使用搜索栏更轻松地查找特定字段。 要更有效地使用搜索选项,请单击所有箭头以显示所有字段!

  4. The + button is there to add fields to the “to export” list.

  5. The “handles” next to the selected fields allow you to move the fields up and down to change the order in which they must be displayed in the exported file.

  6. 如果您需要删除字段,则可以点击垃圾箱图标。

  7. 对于定期报告,保存导出预设可能很有用。 选择所有需要的选项,然后单击模板栏。 在这里,单击 新模板 ,并起一个名字。 下次您需要导出相同列表时,只需选择相关模板。

小技巧

请牢记字段的外部标识符。 例如,相关公司 等于 parent_id 。 这样做可只导出您接下来要导入的内容。

将数据导入 Odoo

如何开始

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

Open the view of the object you want to populate and click on Favorites ‣ Import records.

../../_images/import_button.png

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

如何使用模板

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

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

  • 将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或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 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

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

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

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个公司(前两个联系人服务于同一公司)。你必须首先导入公司,然后导入人员。

如何适配导入模板

导入工具中提供导入模板,适用于大多数数据(联系人、产品、银行对账单等)导入。可以用任何电子表格软件(如Microsoft Office, OpenOffice, Google Drive等)

如何自定义文件

  • 删除你不需要的行。建议不要删除*ID*1(原因如下)

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

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

    ../../_images/field_list.png

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

为什么要用ID行

**ID**(外部ID)是行项目独一无二的标识符。请使用之前的软件,平稳过度到Odoo。

导入数据时,ID号设置不是强制的,但会在很多情况下非常有用。

  • 更新导入:在不创建副本的情况下多次导入同一个文件;

  • 导入关系字段(见下文)

如何导入关系字段

Odoo对象总是与其他众多对象相关联(即产品与产品目录、产品属性、供应商等相关联)。为了导入这些关系,你需要首先从它们自己的列表菜单中导入相关对象的记录。

可以使用关联的记录或ID号导入。当两个记录的名称相同时需要ID号进行区分,即在行标题的末尾添加。” / ID”。(如产品属性:产品属性/属性 / ID)