只有小功能沒有小需求,6000字詳解導(dǎo)入Excel

7 評論 6833 瀏覽 111 收藏 25 分鐘

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

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

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

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

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

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

我整理了以下4點(diǎn),咱們一個個說。

一、導(dǎo)入校驗

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

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

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

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

我們一個一個的說下:

1、文件校驗

(1)導(dǎo)入文件格式

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

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

(2)導(dǎo)入文件大小

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

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

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

目的都是為了加個限制。

(3)導(dǎo)入文件名稱

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

當(dāng)文件名稱沒有特殊作用時,不建議對名稱進(jìn)行校驗。

2、模板校驗

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

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

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

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

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

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

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

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

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

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

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

4、字段校驗

(1)字段是否必填

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

(2)字段是否唯一

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

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

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

下邊會細(xì)聊。

(3)字段格式

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

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

還有小數(shù)點(diǎn)位數(shù)、手機(jī)號、身份證號、稅號等基礎(chǔ)格式的校驗。

這個校驗需要針對每個字段進(jìn)行校驗邏輯說明。

(4)字段長度

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

(5)固定值校驗

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

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

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

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

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

1、當(dāng)填寫某個字段后,另外一個字段則必須填寫。

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

2、字段跨sheet頁校驗

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

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

5、其它校驗

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

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

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

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

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

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

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

二、導(dǎo)入報錯提示

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

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

一般分為2種:

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

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

1、當(dāng)對文件校驗不通過時,需要立即提示

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

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

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

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

2、當(dāng)導(dǎo)入模板不對時,則立即提示

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

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

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

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

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

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

方法1:直接文字提示

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

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

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

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

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

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

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

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

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

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

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

有2種:

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

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

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

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

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

(1)過濾空格

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

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

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

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

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

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

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

四、導(dǎo)入模板制作

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

1、制定好模板

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

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

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

當(dāng)有1對多的關(guān)系時,我們可以設(shè)計2種方式。

①一個單元格填寫多個值

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

②分成多行填寫

將1對多的關(guān)系,按照多行填寫。

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

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

說明每個字段的填寫要求,哪些字段是必填、哪些字段不能重復(fù)等等,就是要說清楚字段該怎么填才能導(dǎo)進(jìn)去。

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

示例如下:

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

對于導(dǎo)入模板的填寫我們可以使用以下方式:

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

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

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

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

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

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

4、結(jié)合excel里的功能設(shè)計模板

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

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

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

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

五、其它注意點(diǎn)

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

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

2、同步還是異步處理

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

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

3、導(dǎo)入文件交互方式的選擇

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

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

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

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

選擇文件:點(diǎn)擊導(dǎo)入,直接彈出文件選擇框,每次只能選擇1個文件,上傳文件就開始進(jìn)行導(dǎo)入。

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

導(dǎo)入成功后,加個“導(dǎo)入成功”的提示。

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

4、添加日志記錄

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

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

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

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

總結(jié)

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

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

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

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

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

專欄作家

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

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

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

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

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

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

    來自浙江 回復(fù)
  3. 很清晰的邏輯描述,收藏點(diǎn)贊??

    來自浙江 回復(fù)
  4. 很詳細(xì)很用心,受教了

    來自廣東 回復(fù)
  5. 干貨,受益匪淺

    來自廣東 回復(fù)
  6. 學(xué)習(xí)了

    來自廣東 回復(fù)
  7. 這是真干貨,點(diǎn)贊

    來自浙江 回復(fù)