导出和导入数据

在 Odoo 中,有时需要导出或导入数据以运行报告或进行数据修改。本文档涵盖了 Odoo 数据的导出和导入。

重要

有时,用户会遇到“超时”错误,或者由于记录的大小而无法处理。这可能发生在大型导出或导入文件过大的情况下。为了规避记录大小的限制,可以分批处理导出或导入。

从Odoo导出数据

在处理数据库时,有时需要将数据导出到一个独立的文件中。这样做有助于活动报告,尽管Odoo为每个可用应用程序提供了一个精确且易于使用的报告工具。

使用 Odoo,可以从任何记录的任何字段中导出值。为此,首先激活列表视图 ( (list) icon),在需要导出的项目上,然后选择应导出的记录。要选择记录,请勾选相应记录旁边的复选框。最后,点击 Actions,然后选择 导出

查看需要启用/点击以导出数据的不同选项。

点击 导出 时,会出现一个 导出数据 的弹出窗口,其中包含多个数据导出的选项:

在 Odoo 中导出数据时需考虑的选项概述..
  1. 勾选 I want to update data (import-compatable export) 选项后,系统仅显示可导入的字段。这在需要 更新现有记录 的情况下非常有用。这就像一个过滤器。不勾选该选项,则会显示更多字段选项,因为它会显示所有字段,而不仅仅是可导入的字段。

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

  3. 这些是可以导出的项目。使用 >(右箭头) 图标显示更多子字段选项。使用 搜索 栏查找特定字段。要更有效地使用 搜索 选项,请点击所有 >(右箭头) 以显示所有字段。

  4. The + (plus sign) icon button is present to add fields to the Fields to export list.

  5. 所选字段左侧的 ↕️ (上下箭头) 可用于上下移动字段,以更改它们在导出文件中显示的顺序。使用 ↕️ (上下箭头) 图标进行拖放操作。

  6. The 🗑️ (trash can) icon is used to remove fields. Click on the 🗑️ (trash can) icon to remove the field.

  7. 对于定期报告,保存导出预设非常有用。选择所有需要的字段,然后点击模板下拉菜单。在那里,点击 新建模板,并为刚刚创建的导出命名一个独特的名称。点击 💾(软盘) 图标以保存配置。下次需要导出相同的列表时,从下拉菜单中选择之前保存的相关模板。

小技巧

了解字段的外部标识符很有帮助。例如,导出用户界面中的 Related Company 等于 *parent_id*(外部标识符)。这很有帮助,因为这样导出的数据仅是需要修改并重新导入的内容。

将数据导入Odoo

在实施过程中或需要 批量更新数据 时,将数据导入 Odoo 非常有帮助。以下文档介绍了如何将数据导入 Odoo 数据库。

警告

导入是永久性的,**无法**撤销。不过,可以使用过滤器(创建于最后修改于)来识别通过导入更改或创建的记录。

小技巧

激活 开发者模式 会改变左侧菜单中可见的导入设置。这样做会显示一个 高级 菜单。此高级菜单中包含两个选项:导入期间跟踪历史记录允许与子字段匹配

激活开发者模式时的高级导入选项。

如果模型使用了 openchatter,导入时跟踪历史 选项会在导入过程中设置订阅并发送通知,但会导致导入速度变慢。

如果选择了 允许与子字段匹配 选项,则在导入时,字段内的所有子字段将用于匹配 Odoo 字段

开始

数据可以导入到任何 Odoo 业务对象中,使用 Excel (` .xlsx ) :abbr:`CSV (逗号分隔值) (` .csv `) 格式。这包括:联系人、产品、银行对账单、日记账分录和订单。

打开要导入/填充数据的对象的视图,然后点击 ⚙️ (操作) ‣ 导入记录

操作菜单显示,导入记录选项高亮显示。

点击 导入记录 后,Odoo 会显示一个单独的页面,其中包含可下载并用公司自身数据填充的模板。由于数据映射已完成,此类模板可以一键导入。要下载模板,请点击页面中央的 客户导入模板

重要

当导入 CSV 文件时,Odoo 提供了 格式化 选项。这些选项在导入专有的 Excel 文件类型(.xls, .xlsx)时 不会 出现。

在 Odoo 中导入 CVS 文件时显示的格式化选项。

格式化 选项进行必要的调整,并确保 Odoo 字段文件列 中的所有列都没有错误。最后,点击 导入 以导入数据。

适配模板

导入工具中提供了最常见数据的导入模板(联系人、产品、银行对账单等)。可以使用任何电子表格软件(Microsoft OfficeOpenOfficeGoogle Drive 等)打开它们。

模板下载完成后,请按照以下步骤操作:

  • 添加、删除和排序列,以最佳适应数据结构。

  • 强烈建议 不要 删除 External ID (ID) 列(原因见下一节)。

  • 通过向下拖动 外部 ID (ID) 列中的 ID 序列,为每条记录设置唯一 ID。

鼠标拖动 ID 列的动画,以便每条记录都有一个唯一的 ID。

注解

当添加新列时,如果其标签与 Odoo 中的任何字段不匹配,Odoo 可能无法自动映射它。然而,在测试导入时,可以手动映射新列。在下拉菜单中搜索相应的字段。

在 Odoo 的初始导入界面中展开的下拉菜单。

然后,在导入文件中使用此字段的标签,以确保未来的导入成功。

小技巧

另一种找出正确列名以导入的有用方法是,使用应导入的字段导出一个示例文件。这样,如果没有示例导入模板,名称也是准确的。

从其他应用程序导入

外部 ID (ID) 是行项目的唯一标识符。可以随意使用之前软件中的 ID,以便于过渡到 Odoo。

导入时设置ID并非强制要求,但在许多情况下会有所帮助:

要在不同记录之间重建关系,应使用原始应用程序中的唯一标识符将其映射到 Odoo 中的 外部 ID (ID) 列。

当导入另一个链接到第一条记录的记录时,使用 XXX/ID (XXX/External ID) 作为原始唯一标识符。此记录也可以通过其名称找到。

警告

需要注意的是,如果两个(或更多)记录具有相同的 外部 ID ,则会发生冲突。

缺少字段以映射列

Odoo 会基于文件的前十行,启发式地尝试找出导入文件中每一列的字段类型。

例如,如果某一列仅包含数字,则只有 integer 类型的字段会作为选项显示。

虽然这种行为在大多数情况下可能是有益的,但也有可能失败,或者该列可能被映射到一个默认未提供的字段。

如果发生这种情况,请勾选 显示关联字段的字段(高级选项),然后每个列都会显示完整的字段列表。

搜索字段以匹配税务列。

更改数据导入格式

注解

Odoo 可以自动检测某一列是否为日期,并尝试从一组最常用的日期格式中猜测日期格式。虽然这一过程适用于许多日期格式,但某些日期格式无法识别。这可能会导致混淆,尤其是在日-月颠倒的情况下;例如在 01-03-2016 这样的日期中,很难猜测日期格式的哪一部分是日,哪一部分是月。

当导入 CSV 文件时,Odoo 提供了 格式化 选项。

要查看 Odoo 从文件中识别出的日期格式,请检查点击文件选择器下的选项时显示的 日期格式。如果此格式不正确,请使用 ISO 8601 定义格式,将其更改为首选格式。

重要

ISO 8601 是一项国际标准,涵盖了全球范围内的日期和时间相关数据的交换与通信。例如,日期格式应为 YYYY-MM-DD。因此,1981年7月24日应写作 1981-07-24

小技巧

导入 Excel 文件(.xls.xlsx)时,建议使用 日期单元格 来存储日期。这样可以保持本地日期格式的显示,无论 Odoo 中日期如何格式化。导入 CSV(逗号分隔值) 文件时,使用 Odoo 的 格式化 部分来选择要导入的日期格式列。

导入带有货币符号的数字

Odoo 完全支持使用括号表示负数的数字,以及带有货币符号的数字。Odoo 还会自动检测使用的千位/小数分隔符。如果使用了 Odoo 未知的货币符号,可能无法识别为数字,导致导入失败。

注解

导入 CSV 文件时,左侧栏会显示 格式化 菜单。在这些选项下,可以更改 千位分隔符

支持的数字示例(以“三万二千”为例):

  • 32.000,00

  • 32000,00

  • 32,000.00

  • -32000.00

  • (32000.00)

  • $ 32.000,00

  • (32000.00 €)

无法工作的示例:

  • ABC 32.000,00

  • $ (32,000.00)

重要

数字周围的 () (括号) 表示该数字为负值。货币符号 必须 放在括号内,以便 Odoo 将其识别为负的货币值。

导入预览表未正确显示

默认情况下,导入预览设置为逗号作为字段分隔符,引号作为文本分隔符。如果 CSV 文件没有这些设置,请修改 格式 选项(在选择 CSV 文件后,显示在 导入 CSV 文件栏下方)。

重要

如果 CSV 文件使用制表符作为分隔符,Odoo 不会 检测到分隔符。需要在电子表格应用程序中修改文件格式选项。请参阅以下 更改 CSV 文件格式 部分。

在电子表格应用程序中更改 CSV 文件格式

在电子表格应用程序中编辑和保存 CSV 文件时,计算机的区域设置将应用于分隔符和定界符。Odoo 建议使用 OpenOfficeLibreOffice,因为这两个应用程序允许修改所有三个选项(在 LibreOffice 应用程序中,转到 ‘另存为’ 对话框 ‣ 勾选 ‘编辑过滤器设置’ 复选框 ‣ 保存)。

Microsoft Excel 在保存时可以修改编码 (‘另存为’ 对话框 ‣ ‘工具’ 下拉菜单 ‣ 编码选项卡).

数据库 ID 与外部 ID 的区别

某些字段定义了与另一个对象的关系。例如,联系人的国家/地区是链接到“国家/地区”对象的一条记录。当导入此类字段时,Odoo 必须在不同记录之间重新创建链接。为了帮助导入此类字段,Odoo 提供了三种机制。

重要

每个导入的字段 只能使用 一种 机制。

例如,要引用联系人的国家,Odoo 提供了三个不同的字段供导入:

  • 国家: 国家名称或代码

  • 国家/数据库 ID: 记录的唯一 Odoo ID,由 PostgreSQL 的 ID 列定义

  • 国家/外部 ID: 此记录在另一个应用程序中引用的 ID(或导入它的 .XML 文件)

以比利时为例,可以使用以下三种方式之一进行导入:

  • Country: Belgium

  • 国家/数据库 ID: 21

  • 国家/外部 ID: base.be

根据公司的需求,使用以下三种方式之一来引用关系中的记录。以下是根据需求应使用其中一种方式的示例:

  • 使用 Country: 当数据来自手动创建的 CSV 文件时,这是最简单的方法。

  • 使用 国家/数据库 ID:这种情况很少使用。它主要由开发人员使用,主要优势是永远不会发生冲突(可能有多个记录具有相同的名称,但它们始终具有唯一的数据库 ID)

  • 使用 国家/外部 ID: 从第三方应用程序导入数据时使用 外部 ID

当使用 外部ID 时,导入 CSV 文件时,需包含 外部ID (ID) 列,该列定义了每个导入记录的 外部ID。然后,可以通过类似 字段/外部ID 的列来引用该记录。以下两个 CSV 文件提供了产品和其类别的示例。

导入关系字段

一个 Odoo 对象总是与许多其他对象相关联(例如,产品与产品类别、属性、供应商等链接)。要导入这些关系,首先需要从相关对象自己的列表菜单中导入相关对象的记录。

这可以通过使用相关记录的名称或其ID来实现,具体取决于情况。当两条记录具有相同名称时,需要使用ID。在这种情况下,请在列标题的末尾添加 / ID`(例如,对于产品属性:`Product Attributes / Attribute / ID)。

字段多重匹配的选项

例如,如果有两个产品类别的子名称都是 Sellable`(例如 `Misc. Products/SellableOther Products/Sellable),验证会停止,但数据仍可能被导入。然而,Odoo 建议不要导入这些数据,因为它们都将链接到 产品类别 列表中找到的第一个 Sellable 类别(Misc. Products/Sellable)。Odoo 建议修改其中一个重复项的值,或者调整产品类别的层次结构。

然而,如果公司不希望更改产品类别的配置,Odoo 建议为此字段 ‘Category’ 使用 外部 ID

导入 many2many 关系字段

标签之间应以逗号分隔,不留空格。例如,如果一个客户需要同时关联到标签 ManufacturerRetailer,则需要在 CSV 文件的同一列中编码为 ‘Manufacturer,Retailer’。

导入 one2many 关系

如果一家公司想要导入包含多个订单行的销售订单,必须在 CSV(逗号分隔值) 文件中为每个订单行保留特定的行。第一个订单行与订单相关的信息导入在同一行。任何额外的订单行都需要一个额外的行,且该行中与订单相关的字段不应包含任何信息。

例如,这里有一个基于演示数据的 CSV(逗号分隔值) 文件,其中包含一些可以导入的报价:

以下 CSV 文件展示了如何导入采购订单及其相应的采购订单行:

以下 CSV 文件展示了如何导入客户及其各自的联系人:

多次导入记录

如果导入的文件包含以下任一列:External IDDatabase ID,则已导入的记录将被修改,而不是重新创建。这非常有用,因为它允许用户在两次导入之间进行一些更改后,多次导入相同的 CSV 文件。

Odoo 负责创建或修改每条记录,具体取决于其是否为新增。

此功能允许公司使用 Odoo 中的 导入/导出工具 在电子表格应用程序中修改一批记录。

未为特定字段提供值

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

从 SQL 应用程序导出/导入不同的表格到 Odoo

如果需要从不同的表中导入数据,则需要在属于不同表的记录之间重新建立关系。例如,如果导入了公司和人员,则需要重新建立每个人与其所在公司之间的联系。

要管理表之间的关系,请使用 Odoo 的 External ID 功能。记录的 External ID 是该记录在另一个应用程序中的唯一标识符。External ID 必须在所有对象的所有记录中唯一。最佳实践是在此 External ID 前加上应用程序或表的名称。(例如,’company_1’、’person_1’ - 而不是 ‘1’)

举个例子,假设有一个 SQL 数据库,其中有两个表需要导入:公司和人员。每个人属于一家公司,因此必须重新创建人员与其所在公司之间的链接。

测试此示例,使用 PostgreSQL 数据库示例

首先,导出所有公司及其 外部 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

要创建与公司关联的人员的 CSV 文件,请在 PSQL 中使用以下 SQL 命令:

> 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_1company_1 在原始数据库中共享相同的 ID 1)。

生成的两个文件无需任何修改即可导入Odoo。导入这两个 CSV(逗号分隔值) 文件后,会有四个联系人和三家公司(前两个联系人链接到第一家公司)。请记住,先导入公司,再导入人员。

在 Odoo 中更新数据

只要 外部ID 保持一致,现有数据就可以通过数据导入进行批量更新。

准备数据导出

要通过导入更新数据,首先导航到要更新的数据,并选择 (list) icon 以激活列表视图。在列表的最左侧,勾选要更新的任何记录的复选框。然后,点击 Actions,并从下拉菜单中选择 导出

在出现的 导出数据 弹出窗口中,勾选标有 我想更新数据(兼容导入的导出) 的复选框。这将自动在导出中包含 外部 ID。此外,它还会将 要导出的字段 列表限制为 包含可导入的字段。

注解

The External ID field does not appear in the Fields to export list unless it is manually added, but it is still included in the export. However, if the I want to update data (import-compatible export) checkbox is ticked, it is included in the export.

使用弹出窗口中的 选项 选择需要包含在导出中的字段,然后点击 导出

导入更新数据

导出后,对数据文件进行任何必要的更改。当文件准备好后,可以按照与正常数据导入相同的过程进行 导入

危险

在更新数据时,保持 External ID 的一致性极为重要,因为这是系统识别记录的方式。如果 ID 被更改或删除,系统可能会添加重复记录,而不是更新现有记录。