只有小功能沒有小需求,6000字詳解導(dǎo)入Excel
在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種情況:
- 文件內(nèi)的數(shù)據(jù)有重復(fù)值
- 文件內(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種:
- 發(fā)現(xiàn)錯誤,立即報錯
- 發(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種:
- 哪條數(shù)據(jù)校驗通過,哪條數(shù)據(jù)進(jìn)數(shù)據(jù)庫某條數(shù)據(jù)通過校驗則直接導(dǎo)入進(jìn)數(shù)據(jù)庫,對于錯誤的數(shù)據(jù),則不進(jìn)入數(shù)據(jù)庫。
- 全部數(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ù)
再次更新新增怎么處理
導(dǎo)入完成后,提供接下來的功能操作入口,用戶體驗上比較好,但是導(dǎo)入數(shù)據(jù)的準(zhǔn)確性及補(bǔ)充不能二次確認(rèn),這點(diǎn)好像有沖突
很清晰的邏輯描述,收藏點(diǎn)贊??
很詳細(xì)很用心,受教了
干貨,受益匪淺
學(xué)習(xí)了
這是真干貨,點(diǎn)贊