导出与导入数据

在 Odoo 中,有时需要导出或导入数据以生成报表或进行数据修改。本文档介绍如何在 Odoo 中导入和导出数据。

在数据库操作中,有时需要将数据导出为独立文件以便报表分析。虽然 Odoo 的各个应用都提供精确的报表工具,但用户仍可选择自行导出数据。

在 Odoo 中,可以从任意记录的任意字段导出值。
操作步骤如下:

  1. 进入要导出数据的列表视图(点击“列表”图标)。
  2. 勾选需要导出的记录。
  3. 点击 操作 → 导出

图 0

当勾选 “我想更新数据(I want to update data / import-compatible export)” 选项时,系统仅显示 可被导入的字段
这在需要更新现有记录的情况下非常有用,相当于一个字段过滤器。
如果不勾选此选项,系统会显示更多字段,包括那些 不能导入的字段

导出时可选择两种格式:

格式描述
.csv以逗号分隔各项数据
.xls包含工作表信息,可保存内容与格式
  • 使用 >(右箭头) 展开字段的子项。
  • 使用 搜索栏(Search) 查找特定字段。
    若想更高效搜索,请先点击所有右箭头展开全部字段。
  • 点击 +(加号) 图标,可将字段加入 “要导出的字段(Fields to export)” 列表。
  • 使用 ↕️(上下箭头) 图标可拖拽调整字段顺序,以控制导出文件中的字段排列顺序。
  • 点击 🗑️(垃圾桶) 图标可删除已选字段。

对于经常导出的报表,可保存导出模板以便复用:

  1. 选择所需字段。
  2. 点击模板下拉菜单(Template)。
  3. 选择 “新建模板(New template)” 并输入唯一名称。
  4. 点击 💾(软盘)图标 保存配置。

下次导出相同列表时,只需从下拉菜单中选择之前保存的模板即可。

图 1

在实施阶段或需要批量更新数据时,导入功能非常有用。

Odoo 支持以 .xlsx.csv 格式导入数据,包括联系人、产品、银行对账单、会计凭证和订单等。

图 3

操作步骤:

  1. 进入目标对象视图;
  2. 点击齿轮图标 → 选择“导入记录”;
  3. 点击“导入客户模板”下载模板;
  4. 填充公司数据;
  5. 点击“上传数据文件”;
  6. 调整 CSV 格式化选项;
  7. 确认字段映射正确;
  8. 点击“测试”验证;
  9. 点击“导入”执行。
  1. 下载导入模板;
  2. 根据数据结构增删列;
  3. 不建议删除“外部 ID(ID)”列;
  4. 通过拖拽生成唯一 ID。

外部 ID 是唯一标识符,可沿用旧系统的 ID。
设置外部 ID 的好处:

  • 可重复导入文件,不会重复创建;
  • 可建立关系字段引用;
  • 支持关联其他表数据。

Odoo 会根据前 10 行内容推测字段类型。若字段未被正确识别,可启用 显示关系字段的字段(高级) 以查看完整字段列表。

图 5

在导入 CSV 文件 时,Odoo 提供了 格式化选项(Formatting options)

要查看 Odoo 从文件中识别出的日期格式,可点击文件选择器下的 选项(Options),并查看显示的 日期格式(Date Format)
若系统识别的格式不正确,可以使用 ISO 8601 标准 指定正确的日期格式。

Odoo 支持:

  • 括号表示负数;
  • 自动检测千位与小数分隔符;
  • 自动识别货币符号。

无效示例: ABC 32.000,00$ (32.000,00)

默认情况下,Odoo 的 导入预览(Import preview) 使用以下格式设置:

  • 字段分隔符(Field separator):逗号(,
  • 文本定界符(Text delimiter):引号("

如果导入的 CSV 文件未使用上述设置,可在选择文件后,于 “导入 CSV 文件(Import CSV file)” 栏下方的 格式化选项(Formatting options) 中进行修改。

在电子表格应用程序中编辑并保存 CSV 文件时,计算机会根据其 区域设置(Regional settings) 自动应用分隔符(separator)和定界符(delimiter)。不同地区的默认分隔符可能不同,例如某些地区使用分号(;)而非逗号(,)。

Odoo 建议使用 OpenOfficeLibreOffice,因为这两款软件允许手动修改以下三个选项:

  • 分隔符(Separator)
  • 定界符(Text delimiter)
  • 编码(Encoding)

LibreOffice 中,可按以下步骤操作:

  1. 进入 “文件(File)→ 另存为(Save As)” 对话框
  2. 勾选 “编辑过滤器设置(Edit filter settings)”
  3. 点击 保存(Save) 后,在弹出的设置中选择所需的分隔符、定界符和编码格式

某些字段用于定义与其他对象的关联关系。
例如,联系人(Contact)的国家(Country)字段,是与“国家”对象记录的关联。当导入此类字段时,Odoo 需要重新建立这些记录之间的关联关系。 为此,Odoo 提供了三种机制来实现字段引用。

以联系人国家为例,Odoo 提供三种导入方式:

导入字段说明示例
Country国家名称或代码Belgium
Country/Database IDOdoo 内部唯一 ID(PostgreSQL 的 ID 列)21
Country/External ID外部系统或 XML 文件定义的 IDbase.be

例如,对于比利时(Belgium),可使用以上任意一种方式导入:

  • Country: Belgium
  • Country/Database ID: 21
  • Country/External ID: base.be

三种方式的适用场景

使用方式适用场景说明
Country手动创建的 CSV 文件最简单、直观的导入方式
Country/Database ID开发者使用稀少使用;不会产生命名冲突(因 ID 唯一)
Country/External ID从第三方应用导入数据推荐用于跨系统数据导入

当使用 外部 ID(External ID) 时:

  • 导入的 CSV 文件应包含名为 External ID (ID) 的列,用于定义每条记录的外部 ID。
  • 之后,其他导入文件可通过 字段名/External ID 的形式引用该记录。

在 Odoo 中,一个对象通常会关联多个其他对象(例如,产品关联产品分类、属性、供应商等)。 要导入这些关联关系,必须先导入相关对象的记录,可通过其各自的列表菜单进行操作。

可以使用关联记录的 名称ID 来建立关联,具体取决于情况。 当存在两个相同名称的记录时,必须使用 ID。在这种情况下,在列标题后添加 /ID(例如,产品属性:Product Attributes / Attribute / ID)。

例如,如果有两个子分类名称相同为 Sellable(例如 Misc. Products/SellableOther Products/Sellable),验证将被中断,但数据可能仍然导入。Odoo 建议不要导入此类数据,因为所有记录将会关联到产品分类列表中找到的第一个 Sellable(即 Misc. Products/Sellable)。 建议修改重复值之一,或调整产品分类层级。

如果公司不希望更改产品分类配置,Odoo 建议对该字段使用 External ID(例如 Category 字段)。

标签(Tags)之间使用 逗号分隔,且不带空格。 例如,如果客户需要同时关联 ManufacturerRetailer 两个标签,则在 CSV 文件中对应列应写作:

图 6

如果公司想要导入包含多条订单行的销售订单,每条订单行必须在 CSV 文件中占用单独的行:

  • 第一条订单行与订单信息在同一行
  • 其他订单行需另起行,且订单信息列留空

示例 CSV 文件(报价单):

图 7

  • 文件中每行包含订单及其订单行信息

示例 CSV 文件(采购订单):

图 8

  • 包含采购订单及其对应的采购订单行

示例 CSV 文件(客户及联系人):

  • 包含客户及其相关联系人

图 9

要在上传 CSV 或 Excel 文件时同时导入图片,请按照以下步骤操作:

  1. 将图片文件名添加到数据文件中对应的 Image 列。
  2. 上传数据文件,或点击 Load Data File 重新加载文件。
  3. Files to import 区域点击 Upload your files
  4. 选择对应的图片文件,所选文件数量会显示在按钮旁边。
  5. 点击 Test 验证所有数据是否有效。
  6. 点击 Import 开始导入。导入过程中,Odoo 会自动检查文件并将上传的图片与数据文件关联。如果没有匹配,数据文件将导入,但不包含图片。

批量导入大量图片

  • 可指定每批导入的最大文件大小(MB)和每批导入的延迟时间,以防系统过载。
  • 操作方法:启用开发者模式,在 Files to import 区域填写 Max size per batchDelay after each batch
  • 默认情况下,延迟设置遵循 Odoo Cloud - 可接受使用政策中定义的 RPC/API 调用限制。

如果导入的文件包含 External IDDatabase ID 列,已导入的记录会被修改,而不是重新创建。 这非常有用,因为用户可以在两次导入之间对 CSV 文件进行修改,然后再次导入同一文件。Odoo 会根据记录是否为新记录,自动创建或修改每条记录。

若 CSV 中未定义字段 → 使用默认值。若字段定义为空 → Odoo 赋予空值。

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

为了管理表之间的关系,可以使用 Odoo 的 External ID 功能。记录的 External ID 是该记录在其他应用中的唯一标识符。External ID 必须在所有对象的所有记录中保持唯一。通常建议在 External ID 前加上应用或表的名称前缀(例如 ‘company_1’, ‘person_1’,而不是 ‘1’)。

示例:假设有一个 SQL 数据库,包含两个要导入的表:companiespeople。每个人属于一个公司,因此需要重新建立人员与公司之间的关联。

示例:

> 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 IDNameIs a CompanyRelated Company/External ID
person_1FabienFalsecompany_1
person_2LaurenceFalsecompany_1
person_3EricFalsecompany_2
person_4RamsyFalsecompany_3

在该文件中,FabienLaurence 任职于 Bigees 公司(company_1)Eric 任职于 Organi 公司(company_2)。 人员与公司的关系是通过公司外部 ID(External ID)建立的。外部 ID 以表名为前缀,以避免人员与公司之间的 ID 冲突(例如:person_1company_1 在原数据库中共享相同的内部 ID 1)。

生成的两个文件可直接导入 Odoo,无需修改。
导入顺序如下:

  1. 先导入公司(companies)
  2. 再导入人员(people)

导入完成后,系统中会有四个联系人与三个公司,其中前两个联系人关联到第一个公司。

已有数据可以通过 数据导入(Import) 批量更新,只要 External ID 保持一致 即可。

要通过导入更新数据,首先:

  1. 导航至需要更新的数据视图。
  2. 点击右上角的 (列表)图标,切换为列表视图。
  3. 在左侧勾选要更新的记录。
  4. 点击 操作(Actions)→ 导出(Export)

在弹出的 导出数据(Export Data) 窗口中:

  • 勾选 我想更新数据(I want to update data / import-compatible export)
    • 该选项会 自动包含 External ID 字段
    • 并仅列出 可被导入的字段

选择要导出的字段后,点击 导出(Export)

导出后,可在文件中修改需要更新的数据。
完成编辑后,按照普通数据导入流程,将文件重新导入 Odoo。