导出与导入数据
导出与导入数据
在 Odoo 中,有时需要导出或导入数据以生成报表或进行数据修改。本文档介绍如何在 Odoo 中导入和导出数据。
重要
有时用户在导出或导入大数据量时,会遇到“超时”错误或记录未处理的情况。为避免此类问题,应将大文件拆分成较小批次进行处理。
从 Odoo 导出数据
在数据库操作中,有时需要将数据导出为独立文件以便报表分析。虽然 Odoo 的各个应用都提供精确的报表工具,但用户仍可选择自行导出数据。
在 Odoo 中,可以从任意记录的任意字段导出值。
操作步骤如下:
- 进入要导出数据的列表视图(点击“列表”图标)。
- 勾选需要导出的记录。
- 点击 操作 → 导出。

当勾选 “我想更新数据(I want to update data / import-compatible export)” 选项时,系统仅显示 可被导入的字段。
这在需要更新现有记录的情况下非常有用,相当于一个字段过滤器。
如果不勾选此选项,系统会显示更多字段,包括那些 不能导入的字段。
导出格式选项
导出时可选择两种格式:
| 格式 | 描述 |
|---|---|
.csv | 以逗号分隔各项数据 |
.xls | 包含工作表信息,可保存内容与格式 |
导出字段设置
- 使用
>(右箭头) 展开字段的子项。 - 使用 搜索栏(Search) 查找特定字段。
若想更高效搜索,请先点击所有右箭头展开全部字段。 - 点击
+(加号) 图标,可将字段加入 “要导出的字段(Fields to export)” 列表。 - 使用 ↕️(上下箭头) 图标可拖拽调整字段顺序,以控制导出文件中的字段排列顺序。
- 点击 🗑️(垃圾桶) 图标可删除已选字段。
保存导出模板
对于经常导出的报表,可保存导出模板以便复用:
- 选择所需字段。
- 点击模板下拉菜单(Template)。
- 选择 “新建模板(New template)” 并输入唯一名称。
- 点击 💾(软盘)图标 保存配置。
下次导出相同列表时,只需从下拉菜单中选择之前保存的模板即可。
提示
了解字段的外部标识符(External ID)非常有帮助。例如,导出界面中的“关联公司”对应 parent_id,这样可以精确导出需修改并重新导入的数据。

将数据导入 Odoo
在实施阶段或需要批量更新数据时,导入功能非常有用。
警告
导入操作是永久性的,无法撤销。但可通过筛选“创建时间”或“最后修改时间”找到由导入操作生成的记录。
提示
启用开发者模式后,导入设置中会出现“高级”菜单,包括:
- 导入期间跟踪历史记录;
- 允许匹配子字段。

当模型使用 openchatter 时,启用“跟踪历史”会发送通知,但会降低导入速度。
启用“匹配子字段”可让系统使用子字段进行匹配。
开始导入
Odoo 支持以 .xlsx 或 .csv 格式导入数据,包括联系人、产品、银行对账单、会计凭证和订单等。

操作步骤:
- 进入目标对象视图;
- 点击齿轮图标 → 选择“导入记录”;
- 点击“导入客户模板”下载模板;
- 填充公司数据;
- 点击“上传数据文件”;
- 调整 CSV 格式化选项;
- 确认字段映射正确;
- 点击“测试”验证;
- 点击“导入”执行。
注解
当导入 Excel 文件时,不显示格式化选项。
修改导入模板
- 下载导入模板;
- 根据数据结构增删列;
- 不建议删除“外部 ID(ID)”列;
- 通过拖拽生成唯一 ID。
注解
若添加的新列无法自动映射,可在测试导入时手动选择对应字段。
提示
若找不到模板,可通过导出样例文件获取正确的字段名。

从其他应用导入
外部 ID 是唯一标识符,可沿用旧系统的 ID。
设置外部 ID 的好处:
- 可重复导入文件,不会重复创建;
- 可建立关系字段引用;
- 支持关联其他表数据。
警告
若多个记录拥有相同外部 ID,将产生冲突。
字段无法映射列
Odoo 会根据前 10 行内容推测字段类型。若字段未被正确识别,可启用 显示关系字段的字段(高级) 以查看完整字段列表。

更改数据导入格式
注解
Odoo 会自动检测列中的日期格式,并尝试从常用日期格式集合中推断日期格式。
虽然这种方式在多数情况下有效,但某些日期格式无法被识别。
例如 01-03-2016 这样的日期,系统可能无法判断 “01” 是日还是月,从而造成混淆。
在导入 CSV 文件 时,Odoo 提供了 格式化选项(Formatting options)。
要查看 Odoo 从文件中识别出的日期格式,可点击文件选择器下的 选项(Options),并查看显示的 日期格式(Date Format)。
若系统识别的格式不正确,可以使用 ISO 8601 标准 指定正确的日期格式。
重要
ISO 8601 是一个国际标准,用于在全球范围内传递和交流日期与时间相关的数据。
标准格式为:YYYY-MM-DD。
例如:1981 年 7 月 24 日,应写作 1981-07-24。
提示
在导入 Excel 文件(.xls 或 .xlsx) 时,建议使用 日期单元格(date cells) 来存储日期。
这样可在不同地区保持日期显示格式一致,而不会受 Odoo 内部格式影响。
在导入 CSV 文件 时,可通过 Odoo 的 Formatting 部分手动选择日期列的导入格式。
导入带货币符号的数字
Odoo 支持:
- 括号表示负数;
- 自动检测千位与小数分隔符;
- 自动识别货币符号。
无效示例: ABC 32.000,00、$ (32.000,00)
重要
括号表示负值,货币符号必须在括号内。
导入预览表显示异常
默认情况下,Odoo 的 导入预览(Import preview) 使用以下格式设置:
- 字段分隔符(Field separator):逗号(
,) - 文本定界符(Text delimiter):引号(
")
如果导入的 CSV 文件未使用上述设置,可在选择文件后,于 “导入 CSV 文件(Import CSV file)” 栏下方的 格式化选项(Formatting options) 中进行修改。
重要
如果 CSV 文件使用 制表符(Tab) 作为分隔符,Odoo 将无法自动识别字段分隔。
此时需要在电子表格软件(如 Excel、Google Sheets 等)中修改文件格式设置。
具体方法请参见后续章节 “更改 CSV 文件格式(Change CSV file format)”。
在电子表格应用中更改 CSV 文件格式
在电子表格应用程序中编辑并保存 CSV 文件时,计算机会根据其 区域设置(Regional settings) 自动应用分隔符(separator)和定界符(delimiter)。不同地区的默认分隔符可能不同,例如某些地区使用分号(;)而非逗号(,)。
Odoo 建议使用 OpenOffice 或 LibreOffice,因为这两款软件允许手动修改以下三个选项:
- 分隔符(Separator)
- 定界符(Text delimiter)
- 编码(Encoding)
在 LibreOffice 中,可按以下步骤操作:
- 进入 “文件(File)→ 另存为(Save As)” 对话框
- 勾选 “编辑过滤器设置(Edit filter settings)”
- 点击 保存(Save) 后,在弹出的设置中选择所需的分隔符、定界符和编码格式
数据库 ID 与外部 ID 的区别
某些字段用于定义与其他对象的关联关系。
例如,联系人(Contact)的国家(Country)字段,是与“国家”对象记录的关联。当导入此类字段时,Odoo 需要重新建立这些记录之间的关联关系。 为此,Odoo 提供了三种机制来实现字段引用。
重要
在导入时,每个字段只能使用 一种机制。
以联系人国家为例,Odoo 提供三种导入方式:
| 导入字段 | 说明 | 示例 |
|---|---|---|
Country | 国家名称或代码 | Belgium |
Country/Database ID | Odoo 内部唯一 ID(PostgreSQL 的 ID 列) | 21 |
Country/External ID | 外部系统或 XML 文件定义的 ID | base.be |
例如,对于比利时(Belgium),可使用以上任意一种方式导入:
Country: BelgiumCountry/Database ID: 21Country/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/Sellable 与 Other Products/Sellable),验证将被中断,但数据可能仍然导入。Odoo 建议不要导入此类数据,因为所有记录将会关联到产品分类列表中找到的第一个 Sellable(即 Misc. Products/Sellable)。 建议修改重复值之一,或调整产品分类层级。
如果公司不希望更改产品分类配置,Odoo 建议对该字段使用 External ID(例如 Category 字段)。
导入 many2many 字段
标签(Tags)之间使用 逗号分隔,且不带空格。 例如,如果客户需要同时关联 Manufacturer 和 Retailer 两个标签,则在 CSV 文件中对应列应写作:

导入 one2many 字段
如果公司想要导入包含多条订单行的销售订单,每条订单行必须在 CSV 文件中占用单独的行:
- 第一条订单行与订单信息在同一行
- 其他订单行需另起行,且订单信息列留空
示例 CSV 文件(报价单):

- 文件中每行包含订单及其订单行信息
示例 CSV 文件(采购订单):

- 包含采购订单及其对应的采购订单行
示例 CSV 文件(客户及联系人):
- 包含客户及其相关联系人

导入图片文件
要在上传 CSV 或 Excel 文件时同时导入图片,请按照以下步骤操作:
- 将图片文件名添加到数据文件中对应的 Image 列。
- 上传数据文件,或点击 Load Data File 重新加载文件。
- 在 Files to import 区域点击 Upload your files。
- 选择对应的图片文件,所选文件数量会显示在按钮旁边。
- 点击 Test 验证所有数据是否有效。
- 点击 Import 开始导入。导入过程中,Odoo 会自动检查文件并将上传的图片与数据文件关联。如果没有匹配,数据文件将导入,但不包含图片。
注意
当产品模板的 Image 列所有字段已填充时,Files to import 区域才会启用。
数据文件中的图片文件名必须与上传的图片文件对应。
批量导入大量图片
- 可指定每批导入的最大文件大小(MB)和每批导入的延迟时间,以防系统过载。
- 操作方法:启用开发者模式,在 Files to import 区域填写 Max size per batch 和 Delay after each batch。
- 默认情况下,延迟设置遵循 Odoo Cloud - 可接受使用政策中定义的 RPC/API 调用限制。
多次导入记录
如果导入的文件包含 External ID 或 Database ID 列,已导入的记录会被修改,而不是重新创建。 这非常有用,因为用户可以在两次导入之间对 CSV 文件进行修改,然后再次导入同一文件。Odoo 会根据记录是否为新记录,自动创建或修改每条记录。
注解
该功能允许企业使用 Odoo 的导入/导出工具,在电子表格应用中批量修改记录。
字段缺失时的处理
若 CSV 中未定义字段 → 使用默认值。若字段定义为空 → Odoo 赋予空值。
从 SQL 应用导入多表数据
如果需要从不同的表导入数据,需要重新建立不同表之间记录的关系。例如,如果要导入公司和人员数据,需要重新建立每个人与其所在公司的关联。
为了管理表之间的关系,可以使用 Odoo 的 External ID 功能。记录的 External ID 是该记录在其他应用中的唯一标识符。External ID 必须在所有对象的所有记录中保持唯一。通常建议在 External ID 前加上应用或表的名称前缀(例如 ‘company_1’, ‘person_1’,而不是 ‘1’)。
示例:假设有一个 SQL 数据库,包含两个要导入的表:companies 和 people。每个人属于一个公司,因此需要重新建立人员与公司之间的关联。
提示
以下示例使用 PostgreSQL 数据库进行测试。
首先,导出所有公司及其 External ID。在 PSQL 中执行如下命令:
示例:
> 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 公司(company_2)。 人员与公司的关系是通过公司外部 ID(External ID)建立的。外部 ID 以表名为前缀,以避免人员与公司之间的 ID 冲突(例如:person_1 与 company_1 在原数据库中共享相同的内部 ID 1)。
生成的两个文件可直接导入 Odoo,无需修改。
导入顺序如下:
- 先导入公司(companies)
- 再导入人员(people)
导入完成后,系统中会有四个联系人与三个公司,其中前两个联系人关联到第一个公司。
更新 Odoo 中的数据
已有数据可以通过 数据导入(Import) 批量更新,只要 External ID 保持一致 即可。
准备数据导出
要通过导入更新数据,首先:
- 导航至需要更新的数据视图。
- 点击右上角的 (列表)图标,切换为列表视图。
- 在左侧勾选要更新的记录。
- 点击 操作(Actions)→ 导出(Export)。
在弹出的 导出数据(Export Data) 窗口中:
- 勾选 我想更新数据(I want to update data / import-compatible export)。
- 该选项会 自动包含 External ID 字段;
- 并仅列出 可被导入的字段。
注解
External ID 字段不会出现在 “要导出的字段(Fields to export)” 列表中,除非手动添加。
但只要勾选 “我想更新数据”,系统仍会在导出文件中包含此字段。
选择要导出的字段后,点击 导出(Export)。
导入更新后的数据
导出后,可在文件中修改需要更新的数据。
完成编辑后,按照普通数据导入流程,将文件重新导入 Odoo。
注意
更新数据时,External ID 必须保持不变。
系统正是通过该字段识别并匹配现有记录。
如果 ID 被更改或删除,系统可能会 新增重复记录,而不是更新原有记录。