只有小功能沒有小需求,6000字詳解導入Excel

7 評論 7983 瀏覽 120 收藏 25 分鐘

在B端產(chǎn)品中,導入是最常見的功能之一。當我們做項目時,需要涉及到大量的數(shù)據(jù),應該如何處理數(shù)據(jù)?本文介紹了將Excel數(shù)據(jù)導入到數(shù)據(jù)庫中需要注意的點和方法,希望對你有所幫助。

最近在從0到1做一個新的項目,涉及到大量數(shù)據(jù)的維護,有簡單的基礎字典數(shù)據(jù)的維護,也涉及到“嚴肅數(shù)據(jù)”的維護,這些數(shù)據(jù)有個要求:一個都不能錯。

我們是第一期版本,本來想直接寫SQL更新,但是運維不讓搞,也沒有足夠的時間去開發(fā)頁面功能,為了快速生產(chǎn)數(shù)據(jù),這個時候最好的方式就是“批量導入excel”。把導入的功能搞上線后,坑我踩了不少,同時導入功能也是B端產(chǎn)品中最常見的功能。

咱們今天就說說導入excel~接下來我先不按照導入的流程說,因為導入整體的流程比較簡單。大流程就是將Excel數(shù)據(jù)導入到數(shù)據(jù)庫中。

在細化一點,就是模板制作,用戶下載模板,填寫完數(shù)據(jù)后再上傳文件。程序開始數(shù)據(jù)校驗,有錯誤數(shù)據(jù)用戶再修改,直到導入成功進入到數(shù)據(jù)庫。

我就不按照導入的流程說了,直接說我個人感覺比較重要的地方,這些弄清楚那導入就沒問題了。

我整理了以下4點,咱們一個個說。

一、導入校驗

導入時為了保證數(shù)據(jù)的準確性,最重要的就是“校驗”了。

因為是導入的數(shù)據(jù)最終是到數(shù)據(jù)庫,如果你對數(shù)據(jù)庫有了解,校驗邏輯你肯定會清楚很多。

不懂也沒事,咱們先說校驗。

校驗一般分為以下內(nèi)容:

我們一個一個的說下:

1、文件校驗

(1)導入文件格式

對于excel,常見的格式有xlsx、xls、csv;

推薦xlsx格式,它不僅是目前主流的excel格式,而且相同行+列數(shù)據(jù)時,xlsx格式文件體積較小。

(2)導入文件大小

對于導入文件體積大小的限制,對文件大小添加限制的主要原因是文件過大時,程序處理起來會很費勁,所以可以添加大小限制。

可以根據(jù)數(shù)據(jù)量大小設置,建議最大值在5M。

當然也可以對文件內(nèi)的“行數(shù)”添加限制,比如說每次導入最多2000條等。

目的都是為了加個限制。

(3)導入文件名稱

校驗上傳文件的文件名,當上傳與要求的文件名稱不一致時則報錯。

當文件名稱沒有特殊作用時,不建議對名稱進行校驗。

2、模板校驗

模板里有表頭名稱、sheet頁名稱,用于讓程序知道需要更新數(shù)據(jù)庫里的哪個表,哪個字段。

表頭名稱是指導入模板內(nèi)的列名,當導入到數(shù)據(jù)庫的時候,程序知道哪個列對應數(shù)據(jù)庫里的表字段,當與導入模板要求不同時則報錯。

由于一個excel里可以添加多個sheet頁,如果你的模板里涉及到多個sheet頁,這個時候就需要對sheet頁名稱進行校驗。

另外還有對表頭字段名稱順序的校驗,我們可以加上字段順序的校驗,當字段列順序和模板不一樣的時候,則提示模板不對。

當然也可以直接按照字段名稱去匹配,不管字段順序。

當模板校驗通過后,在進入到下一步的數(shù)據(jù)校驗。

3、文件內(nèi)數(shù)據(jù)校驗

當模板校驗通過后,然后在對Excel內(nèi)的數(shù)據(jù)進行校驗,這個時候可以對文件內(nèi)的必填的單元格數(shù)據(jù)、不可重復的單元格數(shù)據(jù)進行校驗。

這個時候還是對Excel內(nèi)的數(shù)據(jù)進行校驗,還沒有到數(shù)據(jù)庫。

當然有個極端情況,就是模板內(nèi)數(shù)據(jù)為空,只有個表頭,這個時候不需要處理,直接提示:文件內(nèi)數(shù)據(jù)為空,請補充數(shù)據(jù)后再上傳。

接下來就是對字段進行其他校驗,具體的校驗咱們在下邊一起說。

4、字段校驗

(1)字段是否必填

如果字段是必填值,導入的excel里單元格為空,所以數(shù)據(jù)就是錯誤的,則需要進行報錯提示。

(2)字段是否唯一

對于一些字段,我們要求是唯一的,但是會存在2種情況:

  1. 文件內(nèi)的數(shù)據(jù)有重復值
  2. 文件內(nèi)的數(shù)據(jù)和數(shù)據(jù)庫里已有的值存在重復

對于這2種情況,都是由于數(shù)據(jù)有誤引起的,我們可以制定規(guī)則:按照最新的唯一值進行更新數(shù)據(jù),或者是直接提示報錯,

下邊會細聊。

(3)字段格式

如數(shù)字格式、日期格式、時間格式、字符串格式。如果這列字段和數(shù)據(jù)庫表字段的格式對不上,也導不進去。

還有就是數(shù)字的大小,比如只能輸入個位數(shù),導入時填寫了100,則這個數(shù)據(jù)就有問題,就需要報錯。

還有小數(shù)點位數(shù)、手機號、身份證號、稅號等基礎格式的校驗。

這個校驗需要針對每個字段進行校驗邏輯說明。

(4)字段長度

比如說最大長度是250個字符,但是excel里的字段長度寫了500字符,那就導不進去了,得提示報錯了。

(5)固定值校驗

如果某個字段需要填寫的固定值。

比如說單元格內(nèi)只能填寫是或者否,填寫其他內(nèi)容時,則無法導入數(shù)據(jù)庫。

對于要填寫固定值的單元格,我們可以在excel模板里添加下拉框,讓用戶直接選擇,而不用再去輸入。

(6)關聯(lián)校驗

關聯(lián)校驗有2種情況:

1、當填寫某個字段后,另外一個字段則必須填寫。

舉個例子:當填寫年齡最小值或者最大值時,則必須填寫年齡單位;當填寫年齡單位時,則必須填寫最大值或者最小值。

2、字段跨sheet頁校驗

對于模板里有多個sheet頁時,且sheet頁之間存在數(shù)據(jù)關系時,這個時候需要說清楚sheet頁之間的校驗。

舉個例子:“說明書藥品基本信息”中的商品編碼與“說明書用法用量”中的“商品編碼”需要對應上,當這兩個sheet頁里的商品編碼對不上的時候,就是錯誤數(shù)據(jù),這個時候就要報錯。

5、其它校驗

整行數(shù)據(jù)重復校驗:如果一行數(shù)據(jù)相同,我們就可以認為是數(shù)據(jù)存在重復值,這個時候可以進行報錯提示。

多個字段聯(lián)合重復校驗:多個字段合并在一起聯(lián)合作為唯一值,則存在重復時則可以進行提示。

根據(jù)填寫的字段做更細的校驗:

比如填寫是數(shù)字,則需要考慮數(shù)字的大小,數(shù)字的小數(shù)點位數(shù)。

如果填寫的是手機號,則需要考慮手機號格式的校驗。

當以上校驗通過后,接下來程序就需要將數(shù)據(jù)導入到數(shù)據(jù)庫了。

我們回顧以上的校驗邏輯,可以發(fā)現(xiàn),這些校驗和“表單錄入”功能需要考慮到的校驗基本相似。

二、導入報錯提示

在導入時,一定會存在填寫內(nèi)容不對的時候,這個時候就需要進行提示出問題數(shù)據(jù)了。

首先我們先確定錯誤提示的時機,就是“什么時候提示”。

一般分為2種:

  1. 發(fā)現(xiàn)錯誤,立即報錯
  2. 發(fā)現(xiàn)錯誤,記錄錯誤,最后統(tǒng)一報錯

因為報錯的時機是跟著校驗走的,我們需要根據(jù)錯誤類型進行判斷:

1、當對文件校驗不通過時,需要立即提示

因為文件校驗不通過,壓根無法處理數(shù)據(jù),這個時候直接報錯提示。如文件類型不對、文件大小過大、文件名稱不對等等。

對于文件類型的限制,我們可以在選擇文件的時候,限制選擇的類型,在選擇文件的彈窗內(nèi),僅展示支持的文件類型,過濾掉其它類型的文件。

對于文件體積大小的校驗,可以在選擇文件后,由前端進行校驗,直接進行提示。

對于文件名稱的校驗,我建議不校驗,如果非要校驗,可以在上傳后由前端或者后端進行校驗,出現(xiàn)錯誤后直接報錯提示。

2、當導入模板不對時,則立即提示

模板不對沒有辦法進行下一步字段校驗,這個時候需要報錯。

如果模板錯誤,我們需要將全部錯誤的表頭一起報錯出來,而不是發(fā)現(xiàn)一個錯誤表頭后就立刻報錯。

報錯的方式,可以直接展示出錯誤的表頭名稱,并提示出正確的表頭名稱。

3、字段校驗不通過,則統(tǒng)一報錯

當導入模板正確,這時系統(tǒng)會對填寫的每個字段數(shù)據(jù)進行校驗,這種時候出現(xiàn)的問題,我認為可以在最后進行統(tǒng)一提示。

對于字段校驗時的錯誤數(shù)據(jù),有幾種方式我們可以參考:

方法1:直接文字提示

說清楚sheet頁名稱+第幾行+第幾列+錯誤信息+正確信息。讓用戶線下修改,重新導入。

對于錯誤的信息,需要制定個排序方式,有條理的展示出錯誤數(shù)據(jù),可以按照sheet頁順序+行數(shù)順序+列順序依次展示。

不過在提醒第幾行時,有個小細節(jié),這個第幾行要和excel文件內(nèi)的行數(shù)對應,要提醒研發(fā)注意。

方法2:導出錯誤數(shù)據(jù)

功能上支持導出錯誤數(shù)據(jù),在excel文件內(nèi)加一列【錯誤信息】列,展示出每行的問題數(shù)據(jù),讓用戶導出錯誤數(shù)據(jù)進行線下修改。

這種比較適合導入字段內(nèi)容較多,數(shù)據(jù)量較大的情況。

方法3:在線修改錯誤數(shù)據(jù)

展示出報錯數(shù)據(jù),并提供功能讓用戶自己在線更改。這種方式比較適合excel內(nèi)字段內(nèi)容較少,校驗邏輯較少的情況。

三、數(shù)據(jù)處理

當導入數(shù)據(jù)后,程序會一邊跑數(shù)據(jù),一邊校驗。這個時候還有幾個點需要注意。

什么樣的數(shù)據(jù)才能進數(shù)據(jù)庫?

有2種:

  1. 哪條數(shù)據(jù)校驗通過,哪條數(shù)據(jù)進數(shù)據(jù)庫某條數(shù)據(jù)通過校驗則直接導入進數(shù)據(jù)庫,對于錯誤的數(shù)據(jù),則不進入數(shù)據(jù)庫。
  2. 全部數(shù)據(jù)校驗通過后,全部導入進數(shù)據(jù)庫意思就是excel里的全部數(shù)據(jù)都通過校驗后,將excel內(nèi)的數(shù)據(jù)全部導入進數(shù)據(jù)庫;當存在任何一條數(shù)據(jù)是錯誤的,則整個excel內(nèi)的數(shù)據(jù)都無法導入進數(shù)據(jù)庫。

重復數(shù)據(jù)的處理方式?

在導入時,當唯一值存在重復時,這個重復有2種情況:一個是在excel文件內(nèi)有重復,一個是excel文件內(nèi)唯一值與數(shù)據(jù)庫已有的數(shù)據(jù)存在重復值。對于重復值有以下處理方式:

  • 報錯,把重復值作為錯誤數(shù)據(jù)提示報錯,讓用戶線下處理。這種方式比較嚴謹,我倒是比較推薦這種方式。
  • 更新數(shù)據(jù)不進行報錯,直接按照唯一值更新數(shù)據(jù)。對于經(jīng)常進行變更的數(shù)據(jù)我們可以采用這種方式。
  • 跳過數(shù)據(jù),不進行處理當唯一值已存在時,則跳過數(shù)據(jù),不更新數(shù)據(jù)。當已存在的唯一值無法進行更新,或者更新后影響其他數(shù)據(jù)時,則建議使用這種方式。當然,如果區(qū)分不了什么時候更新、什么時候跳過時,可以提供功能讓用戶選擇處理。

過濾不必要的數(shù)據(jù):

(1)過濾空格

填寫在單元格里的數(shù)據(jù)當有空格時,如果沒有單獨要求,則可以讓程序過濾掉空格。

如果空格沒過濾,導入到數(shù)據(jù)庫后則會形成臟數(shù)據(jù)。

如果用戶填寫的數(shù)據(jù)就有空格時,這個時候可以考慮清空單元格數(shù)據(jù)內(nèi)的前后空格。

(2)過濾全行空白數(shù)據(jù)

當excel中的數(shù)據(jù)整行數(shù)據(jù)全部為空時,可以將空白行以及之后的行數(shù)據(jù)都不做處理。

如果我們在excel里使用了下拉框等方式,雖然沒有填寫值,但是程序在處理的時候會認為里邊有值。

我們可以設置個規(guī)則:當一行數(shù)據(jù)全部為空時,則認為此行以及之后行都無數(shù)據(jù)。

四、導入模板制作

對于導入模板,我們需要說清楚模板怎么填寫,需要把上邊提到的字段校驗說清楚,同時結合excel的功能制作模板。

1、制定好模板

定義好需要填寫字段的表頭名稱,名稱要和功能上的名稱一致。

提供下載模板功能,讓用戶下載模板使用。

對于1對1的關系,這個就很簡單,每列對應數(shù)據(jù)庫表中的一個字段,定義好模板中的每個表頭列名。

當有1對多的關系時,我們可以設計2種方式。

①一個單元格填寫多個值

在單元格內(nèi)填寫多個值,通過一個固定的分隔符號,比如用中文逗號,中文頓號、空格等固定值,讓程序知道該怎么分隔。

②分成多行填寫

將1對多的關系,按照多行填寫。

我們可以根據(jù)實際填寫的場景設置,把規(guī)則說清楚即可。

2、制定好模板字段的填寫邏輯

說明每個字段的填寫要求,哪些字段是必填、哪些字段不能重復等等,就是要說清楚字段該怎么填才能導進去。

如果字段過多時,可以拉個excel表,單獨說明校驗邏輯提供給研發(fā)。

示例如下:

3、說清楚“如何填寫模板”

對于導入模板的填寫我們可以使用以下方式:

①新增一個sheet頁寫模板說明

②在模板前幾行填寫模板說明

③在單元格添加批注的方式填寫說明

④填寫示例數(shù)據(jù)

新增一行示例數(shù)據(jù),讓用戶知道該怎么填寫。

以上的方式我們也可以結合在一起,同時提示用戶該怎么填。

4、結合excel里的功能設計模板

① 如果填寫的數(shù)據(jù)是固定值,我們可以使用下拉框,直接讓用戶下拉選擇。

如果字典值過多的時候,可以新增一個sheet頁,通過設置下拉框取值范圍即可。

②在模板內(nèi)的添加基礎校驗

使用excel里的“有效性”,添加基礎的校驗。

五、其它注意點

1、每次導入文件的數(shù)量

在開始導入前,首先要看每次支持導入的文件數(shù)量。一般每次導入1個文件。當然也能一次導入多個文件,直接每次選擇多個文件即可。當同時導入多個文件時,需要注意每個文件直接是否有關系,每個文件的處理是否有處理順序。

2、同步還是異步處理

同步處理就是導入后,直接處理,頁面處于加載狀態(tài),后臺進行導入處理,此時用戶不能進行其它操作,只能當處理完成后,才能進行其他操作。對于數(shù)據(jù)量較小,處理時間在用戶可接受時間內(nèi),比如說10秒內(nèi),可以采用同步處理的方式。我和研發(fā)溝通后,同步處理起來比較方便,我們采用的都是同步處理方式。

異步處理,就是上傳文件后,在后臺進行處理,用戶可以進行其他操作。當后臺處理完成后,在提示用戶處理結果。對于數(shù)據(jù)量較大,處理時間較長時,可以采用異步處理的方式。

3、導入文件交互方式的選擇

導入文件的交互方式要看采用哪種數(shù)據(jù)處理方式,才能設計對應的頁面交互。

我就不一個個說了,給大家舉個例子:

最簡單的,每次導入1個文件+出現(xiàn)一個錯誤數(shù)據(jù)則無法導入+同步處理。

下載模板:列表里有個下載模板的入口

選擇文件:點擊導入,直接彈出文件選擇框,每次只能選擇1個文件,上傳文件就開始進行導入。

導入后,程序同步處理,添加個加載狀態(tài),當有錯誤數(shù)據(jù)時,則報錯提示。

導入成功后,加個“導入成功”的提示。

其它的交互方式大家可以搜搜看,有很多。

4、添加日志記錄

由于我們對數(shù)據(jù)要求很嚴格,所以我們添加了日志記錄,用于數(shù)據(jù)追查。

5、保證功能的連續(xù)性

在我們系統(tǒng)中,數(shù)據(jù)導入后,需要將導入的數(shù)據(jù)提交給審核人員進行審核,所以我們在導入成功后,添加了“提交審核”的功能,用戶可以直接提交數(shù)據(jù)去審核。

為了保證流程的流暢,我們可以在導入完成后,提供接下來的功能操作入口。

總結

說了很多,導入excel是常見的基礎功能,但是涉及到的內(nèi)容很多,是個細活,從模板制作到校驗邏輯,到報錯提示,直到數(shù)據(jù)導入成功。

能把導入excel搞清楚,那我們弄其它數(shù)據(jù)相關的需求也就so easy 了。

咱們再回頭看,導入excel其實就是導入到數(shù)據(jù)庫。

當你對數(shù)據(jù)庫有了解,你就會清晰很多,數(shù)據(jù)庫有字段格式、長度、是否為空,外鍵等要求,這些不就是excel中的校驗。

所以還是推薦大家了解數(shù)據(jù)庫的知識來豐富自己~

專欄作家

王大鹿,公眾號:產(chǎn)品大鹿,人人都是產(chǎn)品經(jīng)理專欄作家。關注醫(yī)療領域,擅長原型設計、需求分析和方案設計,分享能落地的工作技能~

本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉載

題圖來自 Unsplash,基于 CC0 協(xié)議

該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務

更多精彩內(nèi)容,請關注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 再次更新新增怎么處理

    來自湖北 回復
  2. 導入完成后,提供接下來的功能操作入口,用戶體驗上比較好,但是導入數(shù)據(jù)的準確性及補充不能二次確認,這點好像有沖突

    來自浙江 回復
  3. 很清晰的邏輯描述,收藏點贊??

    來自浙江 回復
  4. 很詳細很用心,受教了

    來自廣東 回復
  5. 干貨,受益匪淺

    來自廣東 回復
  6. 學習了

    來自廣東 回復
  7. 這是真干貨,點贊

    來自浙江 回復