匯出和匯入數據

使用 Odoo 時,有時需要匯出或匯入資料,以編製各類報告,或對資料進行修改。本文講解 Odoo 是如何匯出及匯入資料。

重要

有時,使用者會遇到「超時」錯誤,或者由於記錄過大,而無法處理。此問題可能會在匯出數據量較大,或匯入檔案太大的情況下發生。要繞過記錄大小的限制,可以分批處理匯出及匯入。

從 Odoo 匯出數據

在操作数据库时,有时需要将数据导出为独立文件。这种操作有助于生成业务活动报表,不过 Odoo 已为旗下所有应用程序配备了精准的报表工具。

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

啟用/按下以匯出數據的不同操作的檢視畫面

点击 导出`时,会出现一个 :guilabel:`导出数据 弹出窗口,其中有多个导出数据的选项:

在 Odoo 匯出數據時需考慮選項的概覽。
  1. 如果勾选 我想更新数据(可导入可导出) 选项,系统将只显示可导入的字段。这对 :ref:` 现有记录需要更新 <essentials/update-data>` 的情况很有帮助。这就像一个筛选器。如果不勾选该复选框,就会提供更多的字段选项,因为它会显示所有字段,而不仅仅是可以导入的字段。

  2. 匯出時,可選擇以兩種格式進行: .csv.xls 。若使用 .csv ,項目之間會用逗號分隔;而 .xls 則在檔案中,保留所有工作表的資訊,包括內容及格式。

  3. 这些是可以导出的项目。使用 (显示子字段) 图标显示更多子字段选项。使用 搜索 栏查找特定字段。要更有效地使用 搜索 选项,请点击所有 (显示子字段) 图标以显示所有字段。

  4. 使用 (选择字段) 图标按钮可将字段添加到 要导出的字段 列表中。

  5. 选定字段左侧的 :guilabel:`(排序) 图标可用于上下移动字段,以更改它们在导出文件中的显示顺序。使用 (排序) 图标拖放。

  6. (删除字段) 用于删除字段。点击 (删除字段) 图标删除字段。

  7. 对于周期性报表,保存导出预设可大幅提升操作效率。先勾选所需的全部字段,再点击模板下拉菜单;在菜单中选择 新建模板,为导出模板命名。点击 (软盘) 图标保存配置。后续若需导出相同的列表数据,直接从下拉菜单中选择此前保存的对应模板即可。

小訣竅

知道欄位的外部標識符也很有用。例如,匯出使用者介面中的 相關公司 是等於 parent_id (外部標識符)。這很有幫助,因為匯出的唯一數據,就是要修改及重新匯入的數據。

匯入數據至 Odoo

在實施過程中,或在需要 大批更新 數據時,可利用 Odoo 數據匯入功能。本文介紹如何將數據匯入 Odoo 資料庫。

警告

匯入屬於永久性操作, 無法 撤銷。不過,可以使用篩選器( 建立日期最後修改日期 ),識別在匯入時更改或建立的記錄。

小訣竅

啟動 開發人員模式 後,左邊選單顯示的匯入設置會改變,會顯示 進階 選單。此進階選單包括兩個選項: 匯入時追蹤歷史記錄 以及 允許與子欄位配對

啟動開發人員模式時的進階匯入選項。

若模型使用 openchatter,則 匯入時追蹤歷史記錄 選項會在匯入過程中,設置訂閱及發送通知,但會使匯入速度較慢。

若選擇 允許與子欄位配對 選項,在匯入時,欄位內的所有子欄位都會用於配對 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 排序,為每項記錄設置獨一無二的識別碼。

滑鼠向下拖動識別碼直欄的動畫,這樣會令每項記錄都有一個唯一的識別碼。

備註

加入新直欄時,如果標籤與 Odoo 中的任何欄位不相符,Odoo 可能無法自動配對。不過,你可在測試匯入時,手動配對新的直欄。請在下拉式選單中,搜尋相應欄位。

在 Odoo 初始匯入的畫面中,展開了下拉式選單。

之後,在匯入檔案中使用此欄位的標籤,以確保將來匯入成功。

小訣竅

另一个找出正确导入列名的有用方法是使用要导入的字段导出一个示例文件。这样,如果没有样本导入模板,名称也会准确无误。

從另一應用程式匯入

外部 ID (ID) 是一个行项目的唯一标识符。可以使用以前软件中的 :guilabel:` 外部 ID` (ID),以方便向 Odoo 过渡。

匯入時,並非強制設置識別碼的,但識別碼在許多情況下都很有用:

要重新建立不同記錄之間的關係,應使用原始應用程式中的唯一標識符,將其配對至 Odoo 的 外部識別碼 (ID)直欄。

匯入另一項記錄、並連結至第一項記錄時,請使用 XXX/ID (XXX/外部識別碼)作為原始唯一標識符。記錄也可透過其名稱找到。

警告

請留意,如果兩項(或多項)記錄具有相同的 外部識別碼 ,會發生衝突。

對應直欄的欄位缺漏

Odoo 會根據檔案的前十行,以啟發式方式,嘗試找出匯入檔案中每一直欄的欄位類型。

舉例,如果某直欄只包含數字,系統只會選擇 整數 類型的欄位,並顯示為選項。

雖然這種方法大多數情況都有幫助,但也可能會失敗,或者將直欄配對至預設情況下未有提出的欄位。

如果出現這種情況,請選取 顯示關係欄位之欄位(進階)選項,然後每一直欄都會出現完整的欄位列表。

搜尋與稅項直欄配對的欄位。

更改資料匯入格式

備註

Odoo 可自動偵測直欄是否為日期,並嘗試從一組最常用的日期格式中,猜測數據所使用的日期格式。雖然這個過程對很多日期格式都可正確運作,但有些日期格式卻無法識別。系統可能會因日、月位置顛倒,造成混淆:例如在 01-03-2016 這樣的日期中,難以判斷哪個是月份、哪個是日子。

匯入 CSV (逗號分隔值)檔案時,Odoo 會提供 格式化 選項。

要查看 Odoo 從檔案中找到的日期格式,請檢查在檔案選擇器下按下選項時,顯示的 日期格式。若格式不正確,請使用 ISO 8601 標準去定義格式,將其更改為首選格式。

重要

ISO 8601 是一项国际标准,涵盖全球范围内日期和时间相关数据的交换和通信。例如,日期格式应为 YYYY-MM-DD。如果是 1981 年 7 月 24 日,则应写成 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 檔案使用製表符(Tab)作為分隔符,Odoo 不會 偵測分隔符,使用者需要在試算表應用程式,修改檔案的格式選項。請參閱以下 更改 CSV 檔案格式 部份。

以試算表程式更改 CSV 檔案格式

使用試算表應用程式編輯及儲存 CSV 檔案時,分隔符及定界符會按照電腦的區域設定去套用。Odoo 建議使用 OpenOfficeLibreOffice ,因為這兩個應用程式允許修改全部三個選項。(在 LibreOffice 應用程式中,前往 「另存為」對話框 ‣ 勾選「編輯篩選設定」 ‣ 儲存 )。

Microsoft Excel 可在儲存時修改編碼( 「另存為」對話框 ‣ 「工具」下拉式選單 ‣ 編碼分頁 )。

資料庫識別碼與外部識別碼之間的區別

某些欄位定義資料與另一個物件的關係。例如,聯絡人的國家/地區,是與「國家/地區」物件的記錄相關聯。匯入此類欄位時,Odoo 必須重新建立不同記錄之間的舊有關聯。為協助使用者匯入此類欄位,Odoo 提供三種機制。

重要

每個匯入的欄位,應 只使用一個 機制。

例如,要參照聯絡人所在的國家/地區,Odoo 建議匯入三個不同的欄位:

  • 國家或地區:國家/地區的名稱或代碼

  • 國家或地區/資料庫識別碼:記錄的唯一 Odoo 識別碼,由 ID PostgreSQL 一欄所定義

  • 國家或地區/外部識別碼:另一個應用程式(或用以匯入該記錄的 .XML 檔案)中,引用此記錄的識別碼

以比利時為例,請使用以下三種方式的其中一種,去進行匯入:

  • 國家或地區比利時

  • 國家或地區/資料庫識別碼21

  • 國家或地區/外部識別碼base.be

根據公司的需要,使用這三種方式的其中一種,去引用有關聯關係的記錄。以下是一個根據需要,使用其中一種方式的示例:

  • 使用 國家或地區:數據若來自手動建立的 CSV 檔案時,這是最簡單的方法。

  • 使用 國家或地區/資料庫識別碼:應該絕少會使用此方法。它主要由開發人員使用,因為其主要優點是不會產生衝突(可能會有多個同名的記錄,但它們由始至終都有獨特的資料庫識別碼)

  • 使用 國家或地區/外部識別碼:從第三方應用程式匯入數據時,使用 外部識別碼

若使用 外部識別碼 ,請匯入已在 外部識別碼 (ID)直欄為每項所匯入的記錄定義了 外部識別碼CSV 檔案。然後,就可以用 欄位/外部識別碼 之類的直欄,去引用該記錄。以下兩個 CSV 檔案,提供有關產品及其類別的示例。

匯入關係欄位

Odoo 物件經常會與許多其他物件相關聯,例如:產品會與產品類別、產品屬性、供應商等相關聯。要匯入這些關係,首先需要在相關物件的列表選單中,匯入相關物件的記錄。

按照具體情況,可以使用相關記錄的名稱或識別碼(ID)去實現這一點。如果兩項記錄的名稱相同,便應使用識別碼。在這種情況下,請在直欄標題的末尾加上 / ID (例如產品屬性,會是: 產品屬性 / 屬性 / ID )。

欄位多項匹配的選項

假設有兩個產品類別,子名稱為 可銷售 (例如, 雜項產品/可銷售其他產品/可銷售 ),驗證會暫停,但仍可匯入數據。但是,Odoo 建議不要匯入數據,因為所有數據都將會關聯至 產品類別 列表( 雜項產品/可銷售 )中的第一個 可銷售 類別。Odoo 建議修改其中一個重複項目的值,或修改產品類別的層級結構。

但是,如果公司不想更改產品類別的配置,Odoo 建議使用這個「類別」欄位的 外部識別碼

匯入 many2many(多對多)關係欄位

標籤之間,應該以西式逗號隔開,不可有任何空格。例如,如果客戶需要關聯兩個標籤 製造商零售商 ,便需要在 CSV 檔案的同一直欄中,將 製造商,零售商 編碼。

匯入 one2many(一對多)關係

如果公司要匯入包含多個訂單資料行的銷售單,必須在 CSV 檔案中,為每個訂單資料行保留特定的列。第一個訂單資料行是與訂單相關資訊匯入至同一行。任何其他資料行都需要有額外的列,該列中沒有任何與訂單相關欄位的資訊。

Example

A company imports quotations using a CSV file, based on demo data:

A company imports purchase orders with their respective purchase order lines using a CSV file:

A company imports customers and their respective contacts using a CSV file:

匯入圖像檔案

要連同 上載 的 CSV 或 Excel 檔案一同匯入圖像檔案,請按照以下步驟操作:

  1. 將圖片檔案名稱,加入至數據檔案中相關的 圖片 直欄。

  2. 上載數據檔案 ,或按一下 載入數據檔案 重新載入。

  3. 要匯入的檔案 部份下,按一下 上載檔案

  4. 選擇相關圖像檔案。按鈕旁邊會顯示已選取檔案的數目。

  5. 按一下 測試 ,以驗證所有資料有效。

  6. 按一下 匯入。在匯入過程中,Odoo 會執行檔案檢查,將上載的圖片自動連結至匯入的數據檔案。若未能相符,匯入數據檔案時將不會附帶任何圖片。

備註

  • The Files to import section is enabled if the product template has an Image column with all fields populated.

  • 數據檔案內的圖片檔案名稱,必須對應上載的圖片檔案。

  • When importing a large number of images, specify the maximum batch size in megabytes and set a delay to prevent the system from becoming overloaded. To do so, enable the developer mode and fill in the Max size per batch and the Delay after each batch fields in the Files to import section. By default, the delay meets the RPC/API call limit defined in the Odoo Cloud - Acceptable Use Policy.

多次匯入記錄

如果匯入的檔案包含 外部識別碼資料庫識別碼 的其中一個直欄,已匯入的記錄將被修改,而不是重新建立。這非常有用,因為它允許使用者在兩次匯入之間進行一些修改,然後可重複匯入相同的 CSV 檔案。

Odoo 負責建立或修改每項記錄(視乎是否新一項記錄)。

此功能允許公司在 Odoo 系統內,使用 匯入/匯出工具 去修改試算表應用程式中的一大批記錄。

未有提供值的特定欄位

If all fields are not set in the CSV file, Odoo assigns the default value for every non-defined field. However, if fields are set with empty values in the CSV file, Odoo sets the empty value in the field, instead of assigning the default value.

以 SQL 程式匯出/匯入不同表格至 Odoo

若需要從不同表格匯入數據,你需要為屬於不同表格的記錄,重新建立記錄之間的關係。例如,如果匯入公司及人員資料,便需要重新建立每個人與他們工作的公司之間的連繫。

要管理不同表格之間的關係,請使用 Odoo 的 外部識別碼 功能。記錄的 外部識別碼 是該記錄在其他應用程式的唯一標識符。所有物件、所有記錄的 外部識別碼 ,都必須獨一無二,因此最好在 外部識別碼 開首,加上應用程式或表格的名稱,例如 company_1person_1 ,而不是單純的 1 )。

舉例,假設有一個 SQL 資料庫,當中有兩個表格需要匯入:公司、人員。每個人都屬於一間公司,因此必須重新建立該員工與他工作的公司之間的連繫。

你可使用 PostgreSQL 資料庫範例 ,去測試此示例。

首先,匯出所有公司及其 外部識別碼 。在 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)去建立的。 外部識別碼 的字首是表格名稱,以避免人員及公司的識別碼出現衝突(例如, person_1company_1 在原始資料庫中,各自的識別碼都是 1 )。

生成的兩個檔案,無需任何修改便可匯入 Odoo。匯入這兩個 CSV 檔案後,資料庫會有 4 個聯絡人及 3 間公司(首兩名聯絡人與第一間公司相關聯)。請記住,需要首先匯入公司資料,然後才匯入人員資料。

在 Odoo 內更新資料

只要 外部識別碼 保持一致,便可透過數據匯入功能,大批更新現有數據。

準備資料匯出

To update data through an import, first navigate to the data to be updated, and select the (List) icon to activate list view. On the far-left side of the list, tick the checkbox for any record to be updated. Then, click Actions button, and select Export from the drop-down menu.

在彈出的 匯出數據 視窗中,勾選標示了 我想更新數據(兼容匯入的匯出) 的勾選方格。這樣會自動在匯出資料中,包含 外部識別碼 。此外,它也會限制 要匯出的欄位 清單,使其 只會 包括可以匯入的欄位。

備註

除非手動加入,否則 外部識別碼 欄位 不會 出現在 要匯出的欄位 清單中,但仍會包含在匯出資料內。但是,如果勾選了 我想更新數據(兼容匯入的匯出) 勾選方格,匯出時便會包含該欄位。

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

匯入已更新數據

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

危險

更新數據時,將 外部識別碼 保持一致是極為重要,因為它是系統識別記錄的依據。如果識別碼(ID)被更改或移除,系統可能會重複加入記錄,而不是更新現有的記錄。