匯出和匯入數據

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

重要

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

從 Odoo 匯出數據

使用資料庫時,有時需要將資料匯出成為一個獨立的檔案。雖然 Odoo 已為所有適用的應用程式,提供精準又易用的報告工具,但匯出資料有時仍可協助報告流程進行。

在 Odoo 中,你可以匯出任何記錄中任何欄位的值。要執行此操作,請在需要匯出的項目上啟用列表檢視畫面( (list) icon ),然後選擇要匯出的記錄。要選擇記錄,請勾選相應記錄旁邊的勾選方格。最後,按一下 Actions ,然後按 匯出

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

按下 匯出 時,會彈出一個 匯出數據 視窗,其中有多個匯出數據的選項:

在 Odoo 导出数据时需要考虑的选项概述
  1. 若勾選 我想更新數據(兼容匯入的匯出) 選項,系統只會顯示可匯入的欄位。這在 需要更新現有記錄 時很有用。它就像一個篩選器,如果不勾選該方格,便會提供更多欄位選項,因為它會顯示所有欄位,而不單是可匯入的欄位。

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

  3. 這些是可以匯出的項目。使用 > (右箭頭) 圖示,顯示更多子欄位選項。使用 搜尋 列,可查找特定欄位。若想更有效地使用 搜尋 選項,請按下所有 > (右箭頭) ,以顯示所有欄位。

  4. + (加號) 圖示按鈕,表示在 要匯出的欄位 列表中,加入欄位。

  5. 所選欄位左側的 ↕️ (上下箭頭) 可用作上下移動欄位,以更改它們在匯出檔案中的顯示順序。請使用 ↕️ (上下箭頭) 圖示進行拖放。

  6. 🗑️ (垃圾桶) 圖示用於移除欄位。按一下 ️🗑️ (垃圾桶) 圖示便可移除欄位。

  7. 對經常性報告而言,儲存匯出設定會很有幫助。選擇所有需要的欄位,並按一下範本的下拉式選單。之後,按一下 新範本,為剛剛創建的匯出命名。按一下 💾 (軟磁碟) 圖示,以儲存配置。下次需要匯出相同的列表時,可從下拉式選單中,選擇之前已儲存的相關範本。

小訣竅

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

匯入數據至 Odoo

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

警告

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

小訣竅

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

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

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

若選擇 允許與子欄位配對 選項,在匯入時,欄位內的所有子欄位都會用於配對 Odoo 欄位

開始

可使用 Excel( .xlsx )或 CSV (逗號分隔值 .csv )格式,將數據匯入任何 Odoo 業務物件中。適用資料包括:聯絡人、產品、銀行結單、日記賬記項,以及訂單。

打开要导入/填充数据的对象的视图,然后点击 ⚙️(操作) ‣ 导入记录

顯示的操作選單,突出顯示匯入記錄選項。

点击 导入记录 后,Odoo 会显示一个单独的页面,其中包含可下载的模板,并可使用公司自己的数据进行填充。这些模板可以一键导入,因为数据映射已经完成。要下载模板,请点击页面中央的 导入客户模板

重要

导入 CSV(逗号分隔值) 文件时,Odoo 提供 格式话 选项。导入 Excel 专有文件类型(.xls, .xlsx)时,这些选项**不会**出现。

在 Odoo 中导入 CVS 文件时显示的格式化选项。

对*格式*选项进行必要调整,并确保 Odoo 字段`和 :guilabel:`文件栏 中的所有列都没有错误。最后,点击 导入,以导入数据。

調整範本

最常用匯入數據(聯絡人、產品、銀行結單等)的匯入工具中,會提供匯入範本。你可使用任何試算表軟件(Microsoft Office、OpenOffice、Google Drive 等)開啟它們。

下載範本後,請按照以下步驟操作:

  • 加入、移除及將直欄排序,以最好地適應數據結構。

  • 強烈建議 不要 移除 外部識別碼 (ID)一欄。(原因在下節詳解。)

  • 拖動 外部識別碼 (ID)直欄中的 ID 排序,為每項記錄設置獨一無二的識別碼。

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

備註

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

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

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

小訣竅

另一個找出正確匯入直欄名稱的有用方法,是用想要匯入的欄位,去匯出一個範例檔案。這樣,即使沒有範例匯入範本,也能確保名稱準確無誤。

從另一應用程式匯入

外部識別碼 (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 檔案中,為每個訂單資料行保留特定的列。第一個訂單資料行是與訂單相關資訊匯入至同一行。任何其他資料行都需要有額外的列,該列中沒有任何與訂單相關欄位的資訊。

舉例,這裏有一個 CSV 檔案,可以按照模擬數據,匯入一些報價單:

以下的 CSV 檔案,顯示如何匯入採購訂單,及其各自的採購訂單資料行:

以下的 CSV 檔案,展示如何匯入客戶及其各自的聯絡人記錄:

多次匯入記錄

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

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

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

未有提供值的特定欄位

如果 CSV 檔案內未設定所有欄位,Odoo 會為每個未定義的欄位,指派一個預設值。不過,若欄位在 CSV 檔案中已設為空白值,Odoo 會在欄位設置空值,而非寫入預設值。

以 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 內更新資料

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

準備資料匯出

要透過匯入去更新數據,首先請前往要更新的數據,然後點選 (list) icon 啟用列表檢視畫面。在列表的最左側,勾選想要更新的任何記錄的勾選方格,然後按一下 Actions ,並從下拉式選單中,選擇 匯出

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

備註

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

在彈出視窗中,使用 選項 以選取要匯出的欄位,然後按一下 匯出

匯入已更新數據

匯出完成後,你可對數據檔案進行所需修改。檔案準備就緒後,可按照正常數據匯入的相同流程,進行數據 匯入

危險

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