Odoo 导出与导入数据完整指南
导出和导入数据
在 Odoo 中,有时需要导出或导入数据以生成报表或进行数据修改。本文档介绍了在 Odoo 中进行数据导出和导入的全部步骤。
:::: important ::: title 重要提示 :::
有时用户会遇到“超时”错误,或因为记录体积过大导致处理失败。这种情况可能出现在大批量导出或导入文件过大时。为规避记录大小限制,请将导出或导入拆分为更小的批次进行。 ::::
从 Odoo 导出数据 {#essentials/export_import_data/export-data}
在处理数据库时,有时需要将数据导出为独立文件。这样可以帮助进行活动报告,尽管 Odoo 已为每个可用应用提供了精确的报表工具。
使用 Odoo 时,任何记录的任意字段都可以导出。操作步骤如下:
- 在需要导出的项目上,点击列表视图
fa-list(列表)图标以激活列表视图。 - 勾选要导出的记录对应的复选框。
- 点击
Action(操作)按钮,选择fa-uploadExport(导出)。
点击 fa-upload Export 后,会弹出 Export Data(导出数据)窗口,提供多种导出选项:
- 勾选 I want to update data (import-compatable export)(我想更新数据(兼容导入的导出))后,系统只显示可导入的字段。这在需要 更新已有记录 时非常有用,类似于过滤器。若不勾选,则会显示所有字段。
- 导出时可选择两种格式:
.csv与.xls。.csv采用逗号分隔,而.xls包含工作表的全部内容与格式信息。 - 可通过
fa-chevron-right(显示子字段)图标展开更多子字段选项。使用 Search(搜索)栏查找特定字段。若想一次性显示全部字段,可点击所有fa-chevron-right图标。 fa-plus(选择字段)图标用于将字段加入 Fields to export(待导出字段)列表。fa-sort(排序)图标位于已选字段左侧,可上下拖动改变导出文件中字段的顺序。fa-trash(删除字段)图标用于移除字段。点击即可删除。- 对于经常使用的报表,可保存导出预设。选好所有字段后,点击模板下拉菜单,选择 New template(新建模板),为导出模板命名后点击
fa-floppy-o(软盘)图标保存配置。下次需要相同列表时,只需从下拉菜单中选择已保存的模板即可。
:::: tip ::: title 小技巧 :::
了解字段的外部标识符非常有帮助。例如,导出界面中的 Related Company 对应的外部标识符是 parent_id。这样可以确保仅导出需要修改并重新导入的数据。 ::::
将数据导入 Odoo {#essentials/export_import_data/import-data}
在实施阶段或需要 批量更新 数据时,导入数据极为有用。以下文档说明如何将数据导入 Odoo 数据库。
:::: warning ::: title 警告 :::
导入操作是永久性的,无法撤销。但可以使用过滤器(如 created on 或 last modified)来定位导入后新增或修改的记录。 ::::
:::: tip ::: title 小技巧 :::
启用 developer mode(开发者模式)后,左侧菜单会显示更多导入设置,包括 Advanced(高级)菜单。高级菜单提供两个选项:Track history during import(导入期间记录历史)和 Allow matching with subfields(允许子字段匹配)。
- 若模型使用 openchatter,勾选 Track history during import 会在导入时创建订阅并发送通知,但会导致导入速度变慢。
- 若勾选 Allow matching with subfields,则在导入时会使用字段下的所有子字段进行匹配。
::::
入门指南 {#essentials/export_import_data/get-started}
可以使用 Excel(.xlsx)或 CSV(.csv)格式导入任意 Odoo 业务对象的数据,包括联系人、产品、银行对账单、日记账分录和订单等。
打开目标对象的视图,点击
fa-cog(操作)图标,在下拉菜单中选择fa-upload(导入记录)。点击页面中心的 Import Template for Customers 下载模板并填入公司数据。模板已预配置映射关系,可一键导入。
上传已下载的模板或已有文件,按以下步骤操作:
- 点击 Upload Data File 并选择文件。
- 如为 CSV 文件,按需调整 Formatting(格式)选项。
- 确认 File Column(文件列)已正确映射到相应的 Odoo Field,且无错误。
- (可选)点击 Load Data File 重新加载相同文件或换文件。
- 点击 Test 验证数据有效性。
- 点击 Import 完成导入。
:::: note ::: title 备注 :::
导入专有的 Excel 文件(.xls、.xlsx)时 Formatting 选项不会出现。
::::
调整模板 {#essentials/export_import_data/adapt-a-template}
导入工具提供了常用数据的模板(联系人、产品、银行对账单等),可使用任意电子表格软件(Microsoft Office、OpenOffice、Google Drive 等)打开。
下载模板后,按以下步骤操作:
- 添加、删除或排序列以匹配数据结构。
- 强烈建议不要删除 External ID(外部 ID)列。
- 在 External ID 列中向下拖动以为每条记录生成唯一 ID。
:::: note ::: title 备注 :::
新增列时,如果列标签在 Odoo 中找不到对应字段,系统可能无法自动映射。但在测试导入时可以手动映射,使用下拉菜单选择对应字段。
随后,在导入文件中使用该字段的标签,以确保后续导入成功。 ::::
:::: tip ::: title 小技巧 :::
另一种获取正确列名的方法是先导出一份示例文件,然后使用该示例作为模板进行导入。 ::::
从其他应用导入 {#essentials/external-id}
External ID(外部 ID)是行项目的唯一标识符。可以使用之前软件的外部 ID 来帮助迁移到 Odoo。
设置 External ID 不是强制的,但在以下场景非常有帮助:
- 更新导入:同一文件多次导入而不会产生重复记录。
- 导入关系字段。
在导入关联记录时,使用 XXX/ID(XXX/External ID)形式的原始唯一标识符。也可以通过名称查找记录。
:::: warning ::: title 警告 :::
若两个或更多记录拥有相同的 External ID,会产生冲突。 ::::
字段缺失导致无法映射列
Odoo 会根据导入文件前十行的内容推断每列的字段类型。例如,仅包含数字的列只会显示 integer(整数)类型的字段选项。
如果系统未能提供合适的字段,可勾选 Show fields of relation fields (advanced)(显示关系字段的所有字段)选项,以显示完整字段列表。
更改数据导入格式
:::: note ::: title 备注 :::
Odoo 能自动检测日期列的格式,但某些不常见的日期格式可能无法识别,导致日/月颠倒的混淆。例如 01-03-2016 可能被误判。
在导入 CSV 文件时,Odoo 提供 Formatting(格式)选项。可以在文件选择器下方查看 Odoo 检测到的 Date Format(日期格式),若不正确,可改为 ISO 8601 标准格式(YYYY-MM-DD)。
:::: important ::: title 重要提示 :::
ISO 8601 是国际通用的日期时间标准。例如 1981 年 7 月 24 日应写作 1981-07-24。 ::::
:::: tip ::: title 小技巧 :::
导入 Excel 文件(.xls、.xlsx)时,建议使用 date cells(日期单元格)保存日期,这样可以保持本地化显示格式。导入 CSV 时,则通过 Formatting 区域选择日期列的格式。
::::
导入带货币符号的数字
Odoo 完全支持使用括号表示负数以及带货币符号的数字,并能自动识别千位分隔符与小数点。如果使用 Odoo 未识别的货币符号,可能导致导入失败。
:::: note ::: title 备注 :::
在导入 CSV 时,Formatting 菜单左侧可以更改 Thousands Separator(千位分隔符)。 ::::
支持的数字示例(以“三万二千”为例):
- 32.000,00
- 32000,00
- 32,000.00
- -32000.00
- (32000.00)
- $ 32.000,00
- (32000.00 €)
不支持的示例:
- ABC 32.000,00
- $ (32.000,00)
:::: important ::: title 重要提示 :::
在数字前后使用 ()(括号)表示负数时,货币符号必须放在括号内部,Odoo 才能识别为负数货币值。 ::::
导入预览表格显示异常
默认情况下,导入预览使用逗号作为字段分隔符,双引号作为文本定界符。如果 CSV 文件使用了其他分隔符,需要在 Formatting 选项中进行相应修改。
:::: important ::: title 重要提示 :::
若 CSV 文件使用 制表符 作为分隔符,Odoo 将无法识别。此时需在电子表格软件中修改文件的分隔符设置(参见下文 更改 CSV 文件格式)。 ::::
在电子表格软件中更改 CSV 文件格式 {#export_import_data/change-csv}
在电子表格软件中编辑并保存 CSV 时,会受到电脑区域设置的影响。推荐使用 OpenOffice 或 LibreOffice,因为这两款软件允许修改 分隔符、文本定界符和编码 三项设置(在 LibreOffice 中:另存为 → 勾选 编辑过滤器设置 → 保存)。
Microsoft Excel 可以在 另存为 → 工具 → 编码 中修改编码方式。
数据库 ID 与外部 ID 的区别
某些字段定义了与其他对象的关系,例如联系人所属的国家是指向 Country(国家)对象的记录。导入此类字段时,Odoo 支持三种方式:
- Country:国家名称或代码
- Country/Database ID:Odoo 在 PostgreSQL 中为该记录分配的唯一数据库 ID
- Country/External ID:在其他应用或导入的 XML 文件中使用的外部 ID
同一记录只能使用上述三种方式中的一种。例如,要导入比利时(Belgium):
- Country: Belgium
- Country/Database ID: 21
- Country/External ID: base.be
使用场景:
- Country:适用于手工创建的 CSV 文件。
- Country/Database ID:主要供开发者使用,避免冲突。
- Country/External ID:从第三方系统导入时使用。
使用 External ID 时,务必在 CSV 中包含 External ID 列,以便后续通过 Field/External ID 进行关联。
:::: warning ::: title 警告 :::
若两个记录使用相同的 External ID,会产生冲突。 ::::
导入关系字段 {#export_import_data/relation-fields}
Odoo 对象通常与多个其他对象关联(如产品关联类别、属性、供应商等)。导入这些关联时,需要先导入关联对象的记录。
可以使用关联记录的 名称 或 ID(当名称重复时使用 ID),在列标题后加上 / ID(例如 Product Attributes / Attribute / ID)。
多个匹配字段的选项
如果出现同名的记录(如两个产品类别均名为 Sellable),系统会暂停验证并提示可能的冲突。Odoo 建议:
- 修改重复记录的名称或层级,或
- 使用 External ID 来唯一标识该字段。
导入 many2many 关系字段
在 CSV 中,用逗号(不留空格)分隔多个标签。例如,客户关联 Manufacturer 与 Retailer 两个标签时,列值写为 Manufacturer,Retailer。
CSV file for Manufacturer, Retailer <export_import_data/m2m-customers-tags.csv>
导入 one2many 关系
如果需要为同一订单导入多行订单明细,需要为每一行预留一行记录。第一行的订单信息与第一条明细同在一行,其余明细各占一行,且该行的订单相关字段留空。
示例:
CSV file for some quotations <export_import_data/o2m-quotations-order-lines.csv>CSV file for Purchase Orders <export_import_data/o2m-purchase-order-lines.csv>CSV file for Customers and Contacts <export_import_data/o2m-customers-contacts.csv>
导入图片文件
将图片与 CSV 或 Excel 文件一起导入时,按以下步骤操作:
- 在数据文件的相应 Image 列中填写图片文件名。
- 上传数据文件或点击 Load Data File 重新加载。
- 在 Files to import 区域点击 Upload your files。
- 选择对应的图片文件,按钮旁会显示已