导出和导入数据

在 Odoo 中,有时需要导出或导入数据以运行报告或修改数据。本文件介绍如何将数据导入和导出 Odoo。

重要

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

从 Odoo 导出数据

使用数据库时,有时需要将数据导出为不同的文件。不过,Odoo 在每个可用应用程序中都提供了精确、简便的报告工具。

使用 Odoo,您可以导出任何记录中任何字段的值。为此,请在需要导出的项目上使用 (列表) 图标激活列表视图,然后选择要导出的记录。要选择记录,请勾选相应记录旁的复选框。最后,点击 操作 按钮,并选择 导出。

启用/单击以导出数据等操作的视图

小技巧

也可以从 (看板) 视图中导出记录。要选择第一条记录,请按住 Alt 并点击其卡片;按住该键时,卡片上会显示 点击以选择 工具提示。选择一条记录后,点击另一张卡片即可将其添加到所选内容中,或按住 Shift 并点击以选择整个范围。然后,点击 操作 按钮,并选择 导出。

点击 导出 时,会弹出一个 导出数据 弹出窗口。左侧列出记录的 可用字段,右侧列出 要导出的字段,即生成文件的列。

在 Odoo 导出数据时需要考虑的选项概览。
  1. 启用 仅可更新字段 开关后,只会列出可以重新导入 Odoo 的字段。这在 需要更新现有记录 的情况下很有帮助。该开关仅对 可用字段 列表起筛选作用;要导出的字段 列表不受影响。保持该开关关闭会提供更多字段选项,因为它会显示所有字段,而不仅是可导入的字段。

  2. 使用 搜索… 栏查找特定字段。匹配的子字段也会显示,并自动展开其父字段。

  3. 这些是可以导出的项目。使用 (显示子字段) 图标可显示更多子字段选项。要将字段添加到 要导出的字段 列表,请点击字段右侧的 (选择字段) 图标,或双击没有子字段的字段。

  4. 选择生成文件的 格式:Excel 工作簿 (.xlsx),它包含文件中所有工作表的信息,包括内容和格式;或 纯文本 (.csv),其中各项以逗号分隔。

  5. 要导出的字段 列表按顺序保存导出文件的列。使用字段左侧的 (排序) 图标可将其上下拖动,从而更改列在导出文件中的显示顺序。点击 (移除字段) 图标可从列表中移除字段。

  6. 对于定期报表,请将当前选择保存为 导出模板,下次需要导出同一列表时,从下拉菜单中选择该模板。

  7. 如果数据库安装了多种语言,并且至少有一个所选字段可翻译,则会显示 语言 字段,用于 导出翻译。

设置完成后,点击 导出 即可下载文件。

小技巧

了解字段的外部标识符很有帮助。例如,导出用户界面中的 相关公司 等于 parent_id (外部标识符)。这很有帮助,因为这样导出的唯一数据就是应修改和重新导入的数据。

导出模板

导出模板会保存一组字段、字段顺序以及要导出的 语言,以便日后复用相同的文件结构。模板按模型保存,并与数据库中的其他用户共享。

要创建模板,请选择所需字段,点击模板下拉菜单旁边的 (另存为导出模板) 图标,输入唯一的名称,然后点击 (应用更改) 图标。按 Enter 保存,或按 Escape 放弃。

在保存前为导出模板命名。

要编辑现有模板,请从下拉菜单中选择该模板,然后点击 (编辑模板名称和/或字段) 图标。随后可以更改其名称、字段、字段顺序和语言,并通过 (应用更改) 图标保存。点击 (丢弃变更) 图标可将模板恢复原状。

用于编辑或删除所选导出模板的按钮。

要删除模板,请从下拉菜单中选择该模板,点击 (删除模板) 图标,然后确认。

注解

在选中模板但 未 处于编辑状态时更改字段、字段顺序或语言,会清除模板选择,并将当前选择保留为未保存的工作集。这样便可以在现有模板的基础上构建新模板,而不改动原模板。

导出翻译

当数据库上安装了不止一种语言,且 要导出的字段 列表中至少有一个字段可翻译时,该列表下方会显示 语言 字段。默认情况下,不会选择任何语言,可翻译字段将按用户自己的语言导出。

点击 语言 字段,选择一种或多种语言,以按这些语言导出每个可翻译字段的译文。每个选中的语言都会显示为一个标签,点击其上的 (移除) 图标即可移除。

导出对话框的“语言”字段中选择了两种语言。

在生成的文件中,每个可翻译字段随后会被替换为按每种所选语言各一列,列名由字段名和语言代码组成,例如 Name@fr_FR。这与 导入 使用的约定相同,因此启用 仅可更新的字段 开关后执行的导出,可以直接连同译文一起重新导入。

将数据导入 Odoo

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

警告

导入是永久性的,无法 撤销。不过,可以使用筛选器( 创建日期 或 最后修改日期 )来识别导入时更改或创建的记录。

小技巧

激活 开发者模式 会更改左侧菜单中的可见导入设置。这样做会显示 高级 菜单。该高级菜单包括两个选项: 导入时追踪历史记录 和 允许与子字段匹配 。

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

如果数据对象/模型使用了备注与数据审计 的功能,则 导入时追踪历史记录 选项会在导入过程中设置订阅并发送通知,但会导致导入速度变慢。

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

开始

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

打开要导入/填充的对象视图,点击 (操作) 图标,然后在下拉菜单中选择 (导入记录) 。

操作菜单显示,突出显示导入记录选项。

点击 导入客户模板 在页面中间下载一个 模板 并将公司数据填充到其中。这样的模板可以在单击一次后导入,因为数据映射已经预先配置。

要上传下载的模板或现有文件,请执行以下步骤:

  1. 点击 上传数据文件 并选择所需的文件。

  2. 根据需要调整 格式化 选项(仅适用于 CSV 文件)。

  3. 确保 文件栏 中的所有数据都正确映射到相应的 Odoo 字段 中,且没有错误。

  4. (可选)点击 加载数据文件 重新加载相同文件或上传不同文件。

  5. 点击 测试 验证数据是否有效。

  6. 点击 导入 。

注解

导入 Excel 专有文件类型(即 .xls 或 .xlsx)时,不会出现 格式化 选项。

调整模板

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

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

  • 添加、删除和排序列,以匹配导入的数据结构。

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

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

鼠标向下拖动 ID 列的动画,这样每条记录都有一个唯一的 ID。

注解

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

在 Odoo 初始导入屏幕中扩展了下拉菜单。

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

小技巧

另一种有用的查找正确列名称的方法,是先导出一个样本文件,直接使用其标头,当成要导入的字段。这样,如果不存在样本导入模板,名称将是准确的。

从其他应用程序导入

外部ID(ID)是行项目的唯一标识符。可以使用以前软件的外部ID(ID),以方便将数据从其他软件迁移到Odoo。

导入时设置ID不是强制性的,但在许多情况下会有所帮助:

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

当导入另一条记录并链接到第一条记录时,使用 XXX/ID (XXX/外部ID)作为原始唯一标识符。也可使用其名称查找该记录。

警告

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

缺少映射列的字段

Odoo 会根据文件的前十行,启发式地为导入文件中的每一列查找字段类型。

例如,如果有一列只包含数字,那么只有 整数 类型的字段才会显示为选项。

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

如果出现这种情况,请选中 显示关系字段的字段(高级)选项 ,然后每一列就会出现完整的字段列表。

搜索与税列匹配的字段。

更改数据导入格式

注解

Odoo 可自动检测列是否为日期,并尝试从一组最常用的日期格式中猜测日期格式。虽然这个过程可用于许多日期格式,但有些日期格式却无法识别。可能会因日月格式颠倒而造成混乱;在诸如 01-03-2016 这样的日期中,难以判断哪部分代表月份,哪部分代表日。

导入 CSV (逗号分隔值) 文件时,Odoo 提供 格式化 选项。

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

重要

ISO 8601 是国际标准,涵盖全球的交换,以及与日期和时间相关的数据通信。例如,日期格式应为 YYYY-MM-DD 。例如,7月24日1981,应该写成 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 建议使用 OpenOffice 或 LibreOffice ,因为这两个应用程序允许修改所有三个选项(在 LibreOffice 应用程序中,转到 [另存为]对话框 ‣ 勾选[编辑筛选设置] ‣ 保存 )。

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

数据库 ID 与外部 ID 的区别

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

重要

每个导入的字段 仅限一个 机制。

例如,要参考联系人所在的国家/地区,Odoo 建议导入三个不同的字段:

  • 国家/地区: 国家/地区名称或代码

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

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

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

  • 国家/地区: 比利时

  • 国家/数据库 ID: 21

  • 国家/外部ID: base.be

根据公司的需要,使用这三种方式之一来引用关系中的记录。下面是一个根据需要使用其中一种或另一种方式的示例:

  • 使用 国家 :数据来自手动创建的 CSV (逗号分隔值) 文件时,这是最简单的方法。

  • 使用 国家/数据库 ID: 应该很少使用此方法。它主要由开发人员使用,因为它的主要优点是不会产生冲突(可能会有多个同名记录,但它们始终具有独特的数据库 ID)

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

使用 外部ID 时,导入 CSV(逗号分隔值) 文件时,在 外部ID (ID) 列中定义导入的每条记录的 外部ID 。然后,就可以用 字段/外部ID 等列来引用该记录。以下两个 CSV (逗号分隔值) 文件提供了一个产品及其类别的示例。

导入关系字段

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

根据具体情况,可以使用相关记录的名称或 ID 来实现这一点。如果两条记录的名称相同,则应使用 ID。在这种情况下,在列标题末尾添加 /ID (例如,产品属性:产品属性/属性/ID )。

字段上的多个匹配的选项

例如,如果有两个产品品类的子名称为 可销售 (例如,其他产品/可销售 和 其他产品/可销售 ),则验证会停止,但仍可导入数据。但是,Odoo 建议不要导入数据,因为所有数据都将关联到 产品品类 列表( 其他产品/可销售 )中的第一个 可销售 类别。Odoo 建议修改其中一个重复值,或产品品类层次结构。

但是,如果公司不想更改产品品类的配置,Odoo 建议使用该字段 ‘类别’ 的 外部ID 。

导入 many2many 关系字段

标签之间应该用逗号隔开,不能有任何间距。例如,如果一个客户需要关联到两个标签:制造商 和 零售商 ,那么 制造商,零售商 就需要在 CSV(逗号分隔值) 文件的同一列中编码。

导入 one2many 关系

如果一家公司要导入包含多个订单明细的销售订单,则 必须 在 CSV(逗号分隔值) 文件中为每个订单明细保留特定行。第一行的订单明细与订单主信息保持在同一行。对于任何其他明细则需要每明细多加1行,该行中没有任何与订单主信息相关的字段信息。

示例

公司使用 CSV(逗号分隔值) 文件导入包含示例数据的销售订单:

公司使用 CSV(逗号分隔值) 文件导入包含示例数据的采购订单:

公司使用 CSV(逗号分隔值) 文件导入包含示例数据的客户和联系人:

导入图像文件

要与 已上传 CSV 或 Excel 文件一起导入图像文件,请按照以下步骤操作:

  1. 将图像文件名添加到数据文件中的相关 图像 列。

  2. 上传数据文件 或点击 加载数据文件 重新加载。

  3. 点击 要导入的文件 部分下的 上传文件 。

  4. 选择相关图像文件。按钮旁边会显示所选文件的数量。

  5. 点击 测试 验证所有数据是否有效。

  6. 点击 导入 。在导入过程中,Odoo 会执行文件检查,将上传的图像自动链接到导入的数据文件。如果不匹配,则导入数据文件时不带任何图像。

注解

  • 要导入的文件 部分启用,如果产品模板有 图像 列,并且所有字段都填充了字段。

  • 数据文件中的图像文件名必须与上传的图像文件相对应。

  • 当导入大量图像时,请指定每个批次的最大大小(以兆字节为单位),并设置一个延迟,以防止系统过载。要执行此操作,请 启用开发人员模式 并填写 每批次最大大小 和 每批次延迟 字段。默认情况下,延迟满足 Odoo 云 - 可接受使用政策中定义的 RPC/API 调用限制。

多次导入记录

如果导入的文件包含 外部ID 或 数据库 ID 其中一列,则已导入的记录将被修改,而不是创建。这非常有用,因为它允许用户多次导入相同的 CSV(逗号分隔值) 文件,并在两次导入之间进行一些更改。

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

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

未提供特定字段的值

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

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

如果需要从不同的表中导入数据,则需要在属于不同表的记录之间重新创建关系。例如,如果导入了公司和人员,就需要重新创建每个人和他们工作的公司之间的链接。

要管理表格之间的关系,请使用 Odoo 的 外部ID 功能。记录的 外部ID 是该记录在其他应用程序中的唯一标识符。在所有对象的所有记录中,外部ID 必须是唯一的,因此最好在 外部 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_1和company_1在原始数据库中的 ID 都是 1)。

生成的两个文件无需任何修改即可导入 Odoo。导入这两个 CSV(逗号分隔值) 文件后,会出现四个联系人和三个公司(前两个联系人与第一个公司相关联)。请记住,需要首先导入公司,然后再导入人员。

更新 Odoo 中的数据

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

准备数据导出

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

在随后出现的 导出数据 弹出窗口中,启用 仅可更新的字段 开关。这样会自动将 外部ID 包含在导出内容中。此外,它还会将 可用字段 列表限制为 仅 包含可导入的字段。

注解

外部ID 字段 不会 出现在 要导出的字段 列表中,除非手动添加。不过,如果启用了 仅可更新的字段 开关,它就会包含在导出内容中。

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

导入更新数据

导出后,对数据文件进行必要的修改。当文件准备好后,可以按照正常数据导入的相同流程导入 将数据导入Odoo 。

危险

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