B端產(chǎn)品設(shè)計(jì)必看,Excel批量導(dǎo)入的知識(shí)點(diǎn)講解(上篇)
當(dāng)你接到一個(gè)Excel批量導(dǎo)入的需求時(shí),你會(huì)怎么做?如何做,才能夠讓它更加完善?作者結(jié)合自己的一些做法,整理了一些我對(duì)Excel批量導(dǎo)入這一塊的理解,希望對(duì)你有所幫助。
背景
上周五的時(shí)候,深夜在搞一個(gè)Excel批量導(dǎo)入的需求,然后突然意識(shí)到這個(gè)導(dǎo)入需求不是那么簡單的,甚至可以說任何一個(gè)導(dǎo)入需求如果要做到比較完善其實(shí)都不簡單。
然后突然就有了靈感,我把之前做過的一些導(dǎo)入的需求大概看了一下,然后整理了一些我對(duì)Excel批量導(dǎo)入這一塊的理解,把一些可能容易被忽視的知識(shí)點(diǎn)給大家拆解一下。一方面是對(duì)我自己過往知識(shí)做一個(gè)總結(jié),另一方面也是把這個(gè)東西做成一個(gè)“組件化方案”,后續(xù)在其他場景要用的時(shí)候,直接拿來用就好了,最后也可以把這個(gè)東西分享給大家,讓大家也能做到開箱即用。
本文我打算拆成上下篇來講,上篇是講Excel導(dǎo)入的一些校驗(yàn)邏輯和補(bǔ)充知識(shí),下篇再來講怎么設(shè)計(jì)Excel的導(dǎo)入模板,怎么做一些好的交互體驗(yàn)。
一、導(dǎo)入的幾個(gè)步驟
一般來說,B端產(chǎn)品的Excel的導(dǎo)入處理邏輯,可以拆解出這么幾個(gè)步驟:
- 上傳Excel模板,解析模板文件;
- 校驗(yàn)?zāi)0逦募械淖侄?,確認(rèn)數(shù)據(jù)合法合規(guī);
- 執(zhí)行業(yè)務(wù)邏輯,一系列邏輯處理;
- 插入數(shù)據(jù)庫表中,導(dǎo)入完成;
二、導(dǎo)入時(shí)的幾個(gè)核心點(diǎn)
既然有4個(gè)核心的步驟,那么也意味著這4個(gè)步驟都有可能會(huì)出錯(cuò),我們可以對(duì)這4步分別梳理,確認(rèn)一些比較常見的異常場景,然后給出對(duì)應(yīng)的解決方案。
1. 上傳并解析模板
- 模板文件格式不對(duì),例如只支持.xlsx,但是上傳了.pdf,就會(huì)報(bào)錯(cuò);
- 模板文件體積太大,例如僅支持上傳5MB以內(nèi)的文件,但是上傳了一個(gè)10MB的文件就會(huì)報(bào)錯(cuò);
- 模板無法解析,由于一些Excel會(huì)加密,空白或者是已損壞無法打開,導(dǎo)致文件解析失??;
- 模板數(shù)據(jù)量太大,例如只支持一次導(dǎo)入5000行數(shù)據(jù),如果超過就會(huì)報(bào)錯(cuò)或者只取前5000條;
- 模板格式錯(cuò)誤,例如修改了模板的一些表頭或者是列,導(dǎo)致無法解析匹配也會(huì)報(bào)錯(cuò);
2. 校驗(yàn)?zāi)0逦募械淖侄?/h3>
- 字段校驗(yàn)失敗,例如字符長度,字符為空,字符格式,字符校驗(yàn)規(guī)則不通過等,就會(huì)報(bào)錯(cuò);
- 字段重復(fù),例如第一行和第二行的內(nèi)容重復(fù)了或者大多數(shù)重復(fù),就會(huì)報(bào)錯(cuò)(視業(yè)務(wù)規(guī)則而定);
- 字段之間的邏輯關(guān)系不對(duì),例如填了A字段,那么B字段就必須存在等,這些字段之間存在預(yù)設(shè)的某些邏輯關(guān)系,可以在校驗(yàn)?zāi)0逦募械淖侄芜@個(gè)階段去做對(duì)應(yīng)的判斷,也可以放在業(yè)務(wù)邏輯層的時(shí)候去判斷:例如結(jié)束時(shí)間必須要大于開始時(shí)間,A列的值必須要小于B列的值等;
3. 執(zhí)行業(yè)務(wù)邏輯
- 導(dǎo)入的字段在系統(tǒng)中不存在,例如導(dǎo)入SKU庫存,但是系統(tǒng)中不存在該SKU,就會(huì)報(bào)錯(cuò);
- 導(dǎo)入的數(shù)據(jù)和要更新的數(shù)據(jù)不匹配,例如導(dǎo)入了訂單的3條明細(xì),但是訂單實(shí)際只有2條明細(xì),就會(huì)報(bào)錯(cuò);
- 用導(dǎo)入的數(shù)據(jù)去執(zhí)行一些業(yè)務(wù)邏輯失敗,例如批量更新單據(jù)的狀態(tài),但是單據(jù)是不可更新的狀態(tài),就會(huì)報(bào)錯(cuò);
- 還有其他一系列和業(yè)務(wù)邏輯相關(guān)的判斷,都會(huì)在這一層做處理;
4. 插入數(shù)據(jù)庫表中的時(shí)候
- 數(shù)據(jù)寫入失敗,由于超時(shí)或者程序錯(cuò)誤,則導(dǎo)致報(bào)錯(cuò);
- 數(shù)據(jù)重復(fù)導(dǎo)致插入失敗,也會(huì)報(bào)錯(cuò);
- 還有一些其他的程序異常的場景,都會(huì)報(bào)錯(cuò);
三、導(dǎo)入的一些補(bǔ)充知識(shí)
1. 導(dǎo)入是部分成功還是全部成功?
在Excel導(dǎo)入的時(shí)候,數(shù)據(jù)量可能會(huì)比較多,如果1000條數(shù)據(jù)只要有1條失敗,那么這1000條都不允許導(dǎo)入,那這種就是屬于“全部成功”的邏輯,即要求全部成功才可以正常導(dǎo)入。如果1000條數(shù)據(jù)有1條失敗,但是999條可以導(dǎo)入,那么這種就是屬于“部分成功”的邏輯,總體來說,導(dǎo)入支持部分成功、部分失敗,對(duì)用戶的體驗(yàn)來說會(huì)好很多。
如果是“全部成功”的模式,那么最好也是能將Excel所有的行數(shù)據(jù)處理完,然后將失敗了的信息單獨(dú)列出來,方便用戶定位問題,修改模板。這里還需要注意一下,最好避免“擠牙膏式”的報(bào)錯(cuò)。如果某一行有多個(gè)錯(cuò)誤,那么直接將所有的錯(cuò)誤都呈現(xiàn)出來,不要一次只報(bào)一個(gè)錯(cuò),然后客戶反復(fù)修改,造成不好的體驗(yàn)。
如果是“部分成功”的模式,那么導(dǎo)入之后會(huì)直接告訴導(dǎo)入的結(jié)果,成功了XX條,失敗了XX條,還可以單獨(dú)下載失敗的內(nèi)容。
2. 同步導(dǎo)入還是異步導(dǎo)入?
同步導(dǎo)入,就是在導(dǎo)入Excel的時(shí)候頁面一直在處理中,需要等待導(dǎo)入完成之后才可以進(jìn)行其他操作。
異步導(dǎo)入,就是導(dǎo)入Excel的任務(wù)提交之后,會(huì)在后臺(tái)運(yùn)行導(dǎo)入的任務(wù)。這個(gè)時(shí)候用戶可以進(jìn)行其他操作,等到導(dǎo)入任務(wù)處理完成之后再通過站內(nèi)消息來通知處理。
如果Excel數(shù)據(jù)量很大,業(yè)務(wù)邏輯比較復(fù)雜,耗費(fèi)時(shí)間的導(dǎo)入,那么建議使用異步導(dǎo)入;如果是小數(shù)據(jù)量,導(dǎo)入邏輯不復(fù)雜,速度也很快的,那么就使用同步導(dǎo)入即可。
同樣的道理,針對(duì)導(dǎo)出(下載),也可以使用一樣的邏輯去處理。
3. 是導(dǎo)入覆蓋,還是更新?
這個(gè)是屬于業(yè)務(wù)層的判斷了,導(dǎo)入覆蓋的意思就是導(dǎo)入的數(shù)據(jù)直接覆蓋已有的數(shù)據(jù),直接簡單粗暴。
導(dǎo)入更新則是每條導(dǎo)入的數(shù)據(jù)都要和已有的歷史數(shù)據(jù)進(jìn)行比較,如果有相同的就更新,沒有就插入。
具體自己看業(yè)務(wù)場景來取舍,一般來說導(dǎo)入更新的場景比較多,直接覆蓋的比較少。
4. 按表頭名稱還是表頭坐標(biāo)來匹配
Excel是一個(gè)二維表,有X軸和Y軸,也就是行和列。每一列是從A開始一直到Z,然后AA到AZ這樣的順序;每一行則是從1開始一直遞增。A1是一個(gè)坐標(biāo),表示第一行第一列;B3表示第二列第三行……
按表頭名稱匹配,就是預(yù)設(shè)的Excel模板,先解析出第一行表頭的字段,然后用表頭字段和系統(tǒng)的字段進(jìn)行完全匹配,如果匹配上了,那么這一列就是特指某個(gè)字段了。表頭的字段往往是第一行,可以理解為一個(gè)Key,第二行開始就是Value了。
按表頭名稱完全匹配
按表頭坐標(biāo)來匹配,就是不一定把第一行當(dāng)做表頭的Key,而是通過坐標(biāo)來確定這個(gè)表頭的Key是什么。例如第一行可以寫一堆填表須知,然后第二行才是真正的表頭,第三行開始才是Value值。那么A2 B2 C2就是表頭字段,A3 B3 C3往下的就是具體的值了。
按表頭坐標(biāo)匹配
5. 固定模板導(dǎo)入和解析模板導(dǎo)入
固定模板導(dǎo)入,就是我提前預(yù)設(shè)好對(duì)應(yīng)的Excel模板,然后用戶根據(jù)我的Excel模板來填寫對(duì)應(yīng)的字段,然后導(dǎo)入的時(shí)候按字段的名稱去匹配或者按字段所在的坐標(biāo)(A1:B1:C2)去匹配相應(yīng)的數(shù)據(jù),這種方式的大前提就是用戶不能修改模板的順序或者模板的字段名稱等。也是最常用的一種導(dǎo)入的設(shè)計(jì)方案。
預(yù)設(shè)模板導(dǎo)入
解析模板導(dǎo)入,就是我根據(jù)你自定義的模板導(dǎo)入,然后我把你的列都解析出來,然后將你Excel的列和系統(tǒng)中存在的字段進(jìn)行手動(dòng)的匹配,匹配之后就可以保存為一個(gè)解析模板。后續(xù)再導(dǎo)入類似結(jié)構(gòu)的Excel的時(shí)候就可以直接用這個(gè)模板去解析了。比較適合那種數(shù)據(jù)來源比較多,Excel模板有很多種多樣的場景。
解析模板導(dǎo)入
四、一些參考資料
最后分享一些不錯(cuò)的Excel導(dǎo)入設(shè)計(jì)的競品,如果你想在這方面找一些優(yōu)秀案例學(xué)習(xí)一下,那么可以看看下面的幾個(gè)競品:
- https://hc.huoban.com/tables/8a9a/974b
- https://qingflow.com/help/docs/6114c2ced601550046421d83
- https://hc.jiandaoyun.com/doc/9084
五、總結(jié)
今天在收集Excel導(dǎo)入相關(guān)的知識(shí)的時(shí)候,我突然腦海中蹦出來了這么一個(gè)詞:叫作“組件化競品”或者“競品組件化”,可以簡稱為“組件化產(chǎn)品方案”。
怎么理解這個(gè)詞呢?
首先,什么是組件化?我們可以簡單地把組件理解為完成某些特定功能的模板,例如Axure中的母版或者前端框架中的組件。
它的特點(diǎn)是:聚焦于某個(gè)小的場景,解決某個(gè)小的需求,而且和復(fù)雜的實(shí)際業(yè)務(wù)本身沒有太多耦合性。例如前端的一些輸入組件,圖片上傳組件,還有產(chǎn)品的一些Axure組件等。
那么,我們?cè)谠賮砜匆幌率裁词歉偲?,競品這個(gè)詞產(chǎn)品經(jīng)理們肯定是不陌生的。簡單理解就是同行,相同的競爭者,我們都需要做相似的事情。很多時(shí)候我們關(guān)注的都是直接競品,即做的業(yè)務(wù)和方向和我們很相似,系統(tǒng)方案上也大同小異的。但是除了直接競品之外,我們還有很多時(shí)候會(huì)需要借鑒間接競品或者非競品的一些產(chǎn)品設(shè)計(jì),例如一些大廠的交互設(shè)計(jì),業(yè)務(wù)邏輯設(shè)計(jì)等。
這兩者一組合,就得出來了我想要表達(dá)的:通過一些組件來啟發(fā)自己找一些競品來參考學(xué)習(xí),設(shè)計(jì)能提升自己工作效率的組件化方案。
在日常工作中,我們能或多或少會(huì)做很多重復(fù)的事情,這些重復(fù)可能是重復(fù)自己,可能是重復(fù)別人,可能是重復(fù)之前的公司等,總之就是有很多事情的解決方案其實(shí)是可以拿來即用的。
例如,登錄注冊(cè)相關(guān)的業(yè)務(wù),基本上都大同小異,我在A公司做過一次,那么我在B公司的時(shí)候也需要做一遍,那我直接拿A公司的方案是最快的。同樣的道理,Excel的導(dǎo)入和導(dǎo)出方案也是屬于一次整理輸出之后,后續(xù)就可以直接復(fù)用,只需要做很小范圍的改動(dòng)。
Excel的導(dǎo)入和導(dǎo)出,這種設(shè)計(jì)方案是從多個(gè)競品系統(tǒng),甚至都可以不是競品的系統(tǒng)上拿來借鑒使用,這就是“組件化競品”的意思。
花時(shí)間把日常的工作中可以抽出來作為“組件”的內(nèi)容整理一下,然后分別找時(shí)間去查閱相關(guān)的優(yōu)秀的解決方案(競品),然后把它整理成一套可復(fù)用的“組件化競品”,后續(xù)要用的時(shí)候就可以做到開箱即用。
這件事情,我大約是在1年前意識(shí)到,然后半年前開始踐行的,所以大家會(huì)發(fā)現(xiàn)我的語雀知識(shí)庫有很多經(jīng)驗(yàn)的總結(jié),其實(shí)就是“組件化競品”的縮影。
希望上面的一些思考,會(huì)對(duì)你有幫助。
專欄作家
我叫維他命(Vitamin),微信公眾號(hào):PM維他命,人人都是產(chǎn)品經(jīng)理專欄作家。前PHPer,做過在線教育類產(chǎn)品,也做過5年多的跨境供應(yīng)鏈方向的產(chǎn)品,現(xiàn)任某跨境電商ERP的產(chǎn)品負(fù)責(zé)人。主要專注于WMS/OMS/TMS/BMS/ERP等領(lǐng)域,分享跨境和供應(yīng)鏈相關(guān)的產(chǎn)品知識(shí)。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于 CC0 協(xié)議。
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。
請(qǐng)問下樓主,表頭字段只有個(gè)位數(shù)情況下,表頭校驗(yàn)需要報(bào)錯(cuò)提示具體哪個(gè)數(shù)據(jù)錯(cuò)誤嗎,還是統(tǒng)一報(bào)錯(cuò)也可以,字段校驗(yàn)可以在失敗記錄表里面展示所有錯(cuò)誤原因比較好做也直觀
這是做了幾年產(chǎn)品的經(jīng)驗(yàn)呀?
6年
寫的太好 太詳細(xì)了
“解析模板導(dǎo)入,就是我根據(jù)你自定義的模板導(dǎo)入,然后我把你的列都解析出來,然后將你Excel的列和系統(tǒng)中存在的字段進(jìn)行手動(dòng)的匹配,匹配之后就可以保存為一個(gè)解析模板。后續(xù)再導(dǎo)入類似結(jié)構(gòu)的Excel的時(shí)候就可以直接用這個(gè)模板去解析了。比較適合那種數(shù)據(jù)來源比較多,Excel模板有很多種多樣的場景”
這一段 寫得太口語,我我你你的,看得暈,我覺得可以更書面表達(dá)的。
其他都很棒!
哈哈,好的,后續(xù)我注意一下。
去年剛好做了一個(gè)一樣的功能,除了你上面講到的功能層面的,其實(shí)還有一個(gè)非常重要而且容易忽略的點(diǎn),就是數(shù)據(jù)審計(jì)、日志記錄。還有就是現(xiàn)在國內(nèi)的導(dǎo)入基本上都同質(zhì)化了,各種「借鑒」,比如上面提到的 jiandao、qingliu、huoban 甚至是 yida、chuanyun、mingdao 的導(dǎo)入設(shè)計(jì)都大同小異。
嗯 要做導(dǎo)入記錄,導(dǎo)入的日志是吧?
日志記錄根據(jù)對(duì)數(shù)據(jù)的嚴(yán)格性而定吧
之前實(shí)習(xí)的時(shí)候做過這個(gè)功能,踩了很多文中提到的坑,贊一個(gè)