导出和导入数据

在 Odoo 中,有时需要导出或导入数据以生成报表或进行数据修改。本文档介绍了在 Odoo 中进行数据导出和导入的全部步骤。

:::: important ::: title 重要提示 :::

有时用户会遇到“超时”错误,或因为记录体积过大导致处理失败。这种情况可能出现在大批量导出或导入文件过大时。为规避记录大小限制,请将导出或导入拆分为更小的批次进行。 ::::

在处理数据库时,有时需要将数据导出为独立文件。这样可以帮助进行活动报告,尽管 Odoo 已为每个可用应用提供了精确的报表工具。

使用 Odoo 时,任何记录的任意字段都可以导出。操作步骤如下:

  1. 在需要导出的项目上,点击列表视图 fa-list(列表)图标以激活列表视图。
  2. 勾选要导出的记录对应的复选框。
  3. 点击 Action(操作)按钮,选择 fa-upload Export(导出)。

点击 fa-upload Export 后,会弹出 Export Data(导出数据)窗口,提供多种导出选项:

  1. 勾选 I want to update data (import-compatable export)(我想更新数据(兼容导入的导出))后,系统只显示可导入的字段。这在需要 更新已有记录 时非常有用,类似于过滤器。若不勾选,则会显示所有字段。
  2. 导出时可选择两种格式:.csv.xls.csv 采用逗号分隔,而 .xls 包含工作表的全部内容与格式信息。
  3. 可通过 fa-chevron-right(显示子字段)图标展开更多子字段选项。使用 Search(搜索)栏查找特定字段。若想一次性显示全部字段,可点击所有 fa-chevron-right 图标。
  4. fa-plus(选择字段)图标用于将字段加入 Fields to export(待导出字段)列表。
  5. fa-sort(排序)图标位于已选字段左侧,可上下拖动改变导出文件中字段的顺序。
  6. fa-trash(删除字段)图标用于移除字段。点击即可删除。
  7. 对于经常使用的报表,可保存导出预设。选好所有字段后,点击模板下拉菜单,选择 New template(新建模板),为导出模板命名后点击 fa-floppy-o(软盘)图标保存配置。下次需要相同列表时,只需从下拉菜单中选择已保存的模板即可。

:::: tip ::: title 小技巧 :::

了解字段的外部标识符非常有帮助。例如,导出界面中的 Related Company 对应的外部标识符是 parent_id。这样可以确保仅导出需要修改并重新导入的数据。 ::::

在实施阶段或需要 批量更新 数据时,导入数据极为有用。以下文档说明如何将数据导入 Odoo 数据库。

:::: warning ::: title 警告 :::

导入操作是永久性的,无法撤销。但可以使用过滤器(如 created onlast modified)来定位导入后新增或修改的记录。 ::::

:::: tip ::: title 小技巧 :::

启用 developer mode(开发者模式)后,左侧菜单会显示更多导入设置,包括 Advanced(高级)菜单。高级菜单提供两个选项:Track history during import(导入期间记录历史)和 Allow matching with subfields(允许子字段匹配)。

  • 若模型使用 openchatter,勾选 Track history during import 会在导入时创建订阅并发送通知,但会导致导入速度变慢。
  • 若勾选 Allow matching with subfields,则在导入时会使用字段下的所有子字段进行匹配。

::::

可以使用 Excel(.xlsx)或 CSV(.csv)格式导入任意 Odoo 业务对象的数据,包括联系人、产品、银行对账单、日记账分录和订单等。

  1. 打开目标对象的视图,点击 fa-cog(操作)图标,在下拉菜单中选择 fa-upload(导入记录)。

  2. 点击页面中心的 Import Template for Customers 下载模板并填入公司数据。模板已预配置映射关系,可一键导入。

  3. 上传已下载的模板或已有文件,按以下步骤操作:

    1. 点击 Upload Data File 并选择文件。
    2. 如为 CSV 文件,按需调整 Formatting(格式)选项。
    3. 确认 File Column(文件列)已正确映射到相应的 Odoo Field,且无错误。
    4. (可选)点击 Load Data File 重新加载相同文件或换文件。
    5. 点击 Test 验证数据有效性。
    6. 点击 Import 完成导入。

:::: note ::: title 备注 :::

导入专有的 Excel 文件(.xls.xlsx)时 Formatting 选项不会出现。 ::::

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

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

  • 添加、删除或排序列以匹配数据结构。
  • 强烈建议不要删除 External ID(外部 ID)列。
  • External ID 列中向下拖动以为每条记录生成唯一 ID。

:::: note ::: title 备注 :::

新增列时,如果列标签在 Odoo 中找不到对应字段,系统可能无法自动映射。但在测试导入时可以手动映射,使用下拉菜单选择对应字段。

随后,在导入文件中使用该字段的标签,以确保后续导入成功。 ::::

:::: tip ::: title 小技巧 :::

另一种获取正确列名的方法是先导出一份示例文件,然后使用该示例作为模板进行导入。 ::::

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 时,会受到电脑区域设置的影响。推荐使用 OpenOfficeLibreOffice,因为这两款软件允许修改 分隔符、文本定界符和编码 三项设置(在 LibreOffice 中:另存为 → 勾选 编辑过滤器设置 → 保存)。

Microsoft Excel 可以在 另存为工具编码 中修改编码方式。

某些字段定义了与其他对象的关系,例如联系人所属的国家是指向 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,会产生冲突。 ::::

Odoo 对象通常与多个其他对象关联(如产品关联类别、属性、供应商等)。导入这些关联时,需要先导入关联对象的记录。

可以使用关联记录的 名称ID(当名称重复时使用 ID),在列标题后加上 / ID(例如 Product Attributes / Attribute / ID)。

如果出现同名的记录(如两个产品类别均名为 Sellable),系统会暂停验证并提示可能的冲突。Odoo 建议:

  • 修改重复记录的名称或层级,或
  • 使用 External ID 来唯一标识该字段。

在 CSV 中,用逗号(不留空格)分隔多个标签。例如,客户关联 ManufacturerRetailer 两个标签时,列值写为 Manufacturer,Retailer

  • CSV file for Manufacturer, Retailer <export_import_data/m2m-customers-tags.csv>

如果需要为同一订单导入多行订单明细,需要为每一行预留一行记录。第一行的订单信息与第一条明细同在一行,其余明细各占一行,且该行的订单相关字段留空。

示例:

  • 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 文件一起导入时,按以下步骤操作:

  1. 在数据文件的相应 Image 列中填写图片文件名。
  2. 上传数据文件或点击 Load Data File 重新加载。
  3. Files to import 区域点击 Upload your files
  4. 选择对应的图片文件,按钮旁会显示已