當你接到一個Excel批量導入的需求時,你會怎麼做?如何做,才能夠讓它更加完善?作者結合自己的一些做法,整理了一些我對Excel批量導入這一塊的了解,希望對你有所幫助。
背景
上周五的時候,深夜在搞一個Excel批量導入的需求,然後突然意識到這個導入需求不是那麼簡單的,甚至可以說任何一個導入需求如果要做到比較完善其實都不簡單。
然後突然就有了靈感,我把之前做過的一些導入的需求大概看了一下,然後整理了一些我對Excel批量導入這一塊的了解,把一些可能容易被忽視的知識點給大家拆解一下。一方面是對我自己過往知識做一個總結,另一方面也是把這個東西做成一個“元件化方案”,後續在其他場景要用的時候,直接拿來用就好了,最後也可以把這個東西分享給大家,讓大家也能做到開箱即用。
本文我打算拆成上下篇來講,上篇是講Excel導入的一些校驗邏輯和補充知識,下篇再來講怎麼設計Excel的導入模闆,怎麼做一些好的互動體驗。
一、導入的幾個步驟
一般來說,B端産品的Excel的導入處理邏輯,可以拆解出這麼幾個步驟:
- 上傳Excel模闆,解析模闆檔案;
- 校驗模闆檔案中的字段,确認資料合法合規;
- 執行業務邏輯,一系列邏輯處理;
- 插入資料庫表中,導入完成;
二、導入時的幾個核心點
既然有4個核心的步驟,那麼也意味着這4個步驟都有可能會出錯,我們可以對這4步分别梳理,确認一些比較常見的異常場景,然後給出對應的解決方案。
1. 上傳并解析模闆
- 模闆檔案格式不對,例如隻支援.xlsx,但是上傳了.pdf,就會報錯;
- 模闆檔案體積太大,例如僅支援上傳5MB以内的檔案,但是上傳了一個10MB的檔案就會報錯;
- 模闆無法解析,由于一些Excel會加密,空白或者是已損壞無法打開,導緻檔案解析失敗;
- 模闆資料量太大,例如隻支援一次導入5000行資料,如果超過就會報錯或者隻取前5000條;
- 模闆格式錯誤,例如修改了模闆的一些表頭或者是列,導緻無法解析比對也會報錯;
2. 校驗模闆檔案中的字段
- 字段校驗失敗,例如字元長度,字元為空,字元格式,字元校驗規則不通過等,就會報錯;
- 字段重複,例如第一行和第二行的内容重複了或者大多數重複,就會報錯(視業務規則而定);
- 字段之間的邏輯關系不對,例如填了A字段,那麼B字段就必須存在等,這些字段之間存在預設的某些邏輯關系,可以在校驗模闆檔案中的字段這個階段去做對應的判斷,也可以放在業務邏輯層的時候去判斷:例如結束時間必須要大于開始時間,A列的值必須要小于B列的值等;
3. 執行業務邏輯
- 導入的字段在系統中不存在,例如導入SKU庫存,但是系統中不存在該SKU,就會報錯;
- 導入的資料和要更新的資料不比對,例如導入了訂單的3條明細,但是訂單實際隻有2條明細,就會報錯;
- 用導入的資料去執行一些業務邏輯失敗,例如批量更新單據的狀态,但是單據是不可更新的狀态,就會報錯;
- 還有其他一系列和業務邏輯相關的判斷,都會在這一層做處理;
4. 插入資料庫表中的時候
- 資料寫入失敗,由于逾時或者程式錯誤,則導緻報錯;
- 資料重複導緻插入失敗,也會報錯;
- 還有一些其他的程式異常的場景,都會報錯;
三、導入的一些補充知識
1. 導入是部分成功還是全部成功?
在Excel導入的時候,資料量可能會比較多,如果1000條資料隻要有1條失敗,那麼這1000條都不允許導入,那這種就是屬于“全部成功”的邏輯,即要求全部成功才可以正常導入。如果1000條資料有1條失敗,但是999條可以導入,那麼這種就是屬于“部分成功”的邏輯,總體來說,導入支援部分成功、部分失敗,對使用者的體驗來說會好很多。
如果是“全部成功”的模式,那麼最好也是能将Excel所有的行資料處理完,然後将失敗了的資訊單獨列出來,友善使用者定位問題,修改模闆。這裡還需要注意一下,最好避免“擠牙膏式”的報錯。如果某一行有多個錯誤,那麼直接将所有的錯誤都呈現出來,不要一次隻報一個錯,然後客戶反複修改,造成不好的體驗。
如果是“部分成功”的模式,那麼導入之後會直接告訴導入的結果,成功了XX條,失敗了XX條,還可以單獨下載下傳失敗的内容。
2. 同步導入還是異步導入?
同步導入,就是在導入Excel的時候頁面一直在進行中,需要等待導入完成之後才可以進行其他操作。
異步導入,就是導入Excel的任務送出之後,會在背景運作導入的任務。這個時候使用者可以進行其他操作,等到導入任務處理完成之後再通過站内消息來通知處理。
如果Excel資料量很大,業務邏輯比較複雜,耗費時間的導入,那麼建議使用異步導入;如果是小資料量,導入邏輯不複雜,速度也很快的,那麼就使用同步導入即可。
同樣的道理,針對導出(下載下傳),也可以使用一樣的邏輯去處理。
3. 是導入覆寫,還是更新?
這個是屬于業務層的判斷了,導入覆寫的意思就是導入的資料直接覆寫已有的資料,直接簡單粗暴。
導入更新則是每條導入的資料都要和已有的曆史資料進行比較,如果有相同的就更新,沒有就插入。
具體自己看業務場景來取舍,一般來說導入更新的場景比較多,直接覆寫的比較少。
4. 按表頭名稱還是表頭坐标來比對
Excel是一個二維表,有X軸和Y軸,也就是行和列。每一列是從A開始一直到Z,然後AA到AZ這樣的順序;每一行則是從1開始一直遞增。A1是一個坐标,表示第一行第一列;B3表示第二列第三行……
按表頭名稱比對,就是預設的Excel模闆,先解析出第一行表頭的字段,然後用表頭字段和系統的字段進行完全比對,如果比對上了,那麼這一列就是特指某個字段了。表頭的字段往往是第一行,可以了解為一個Key,第二行開始就是Value了。
按表頭名稱完全比對
按表頭坐标來比對,就是不一定把第一行當做表頭的Key,而是通過坐标來确定這個表頭的Key是什麼。例如第一行可以寫一堆填表須知,然後第二行才是真正的表頭,第三行開始才是Value值。那麼A2 B2 C2就是表頭字段,A3 B3 C3往下的就是具體的值了。
按表頭坐标比對
5. 固定模闆導入和解析模闆導入
固定模闆導入,就是我提前預設好對應的Excel模闆,然後使用者根據我的Excel模闆來填寫對應的字段,然後導入的時候按字段的名稱去比對或者按字段所在的坐标(A1:B1:C2)去比對相應的資料,這種方式的大前提就是使用者不能修改模闆的順序或者模闆的字段名稱等。也是最常用的一種導入的設計方案。
預設模闆導入
解析模闆導入,就是我根據你自定義的模闆導入,然後我把你的列都解析出來,然後将你Excel的列和系統中存在的字段進行手動的比對,比對之後就可以儲存為一個解析模闆。後續再導入類似結構的Excel的時候就可以直接用這個模闆去解析了。比較适合那種資料來源比較多,Excel模闆有很多種多樣的場景。
解析模闆導入
四、一些參考資料
最後分享一些不錯的Excel導入設計的競品,如果你想在這方面找一些優秀案例學習一下,那麼可以看看下面的幾個競品:
- https://hc.huoban.com/tables/8a9a/974b
- https://qingflow.com/help/docs/6114c2ced601550046421d83
- https://hc.jiandaoyun.com/doc/9084
五、總結
今天在收集Excel導入相關的知識的時候,我突然腦海中蹦出來了這麼一個詞:叫作“元件化競品”或者“競品元件化”,可以簡稱為“元件化産品方案”。
怎麼了解這個詞呢?
首先,什麼是元件化?我們可以簡單地把元件了解為完成某些特定功能的模闆,例如Axure中的母版或者前端架構中的元件。
它的特點是:聚焦于某個小的場景,解決某個小的需求,而且和複雜的實際業務本身沒有太多耦合性。例如前端的一些輸入元件,圖檔上傳元件,還有産品的一些Axure元件等。
那麼,我們在再來看一下什麼是競品,競品這個詞産品經理們肯定是不陌生的。簡單了解就是同行,相同的競争者,我們都需要做相似的事情。很多時候我們關注的都是直接競品,即做的業務和方向和我們很相似,系統方案上也大同小異的。但是除了直接競品之外,我們還有很多時候會需要借鑒間接競品或者非競品的一些産品設計,例如一些大廠的互動設計,業務邏輯設計等。
這兩者一組合,就得出來了我想要表達的:通過一些元件來啟發自己找一些競品來參考學習,設計能提升自己工作效率的元件化方案。
在日常工作中,我們能或多或少會做很多重複的事情,這些重複可能是重複自己,可能是重複别人,可能是重複之前的公司等,總之就是有很多事情的解決方案其實是可以拿來即用的。
例如,登入注冊相關的業務,基本上都大同小異,我在A公司做過一次,那麼我在B公司的時候也需要做一遍,那我直接拿A公司的方案是最快的。同樣的道理,Excel的導入和導出方案也是屬于一次整理輸出之後,後續就可以直接複用,隻需要做很小範圍的改動。
Excel的導入和導出,這種設計方案是從多個競品系統,甚至都可以不是競品的系統上拿來借鑒使用,這就是“元件化競品”的意思。
花時間把日常的工作中可以抽出來作為“元件”的内容整理一下,然後分别找時間去查閱相關的優秀的解決方案(競品),然後把它整理成一套可複用的“元件化競品”,後續要用的時候就可以做到開箱即用。
這件事情,我大約是在1年前意識到,然後半年前開始踐行的,是以大家會發現我的語雀知識庫有很多經驗的總結,其實就是“元件化競品”的縮影。
希望上面的一些思考,會對你有幫助。
專欄作家
我叫維他命(Vitamin),微信公衆号:PM維他命,人人都是産品經理專欄作家。前PHPer,做過線上教育類産品,也做過5年多的跨境供應鍊方向的産品,現任某跨境電商ERP的産品負責人。主要專注于WMS/OMS/TMS/BMS/ERP等領域,分享跨境和供應鍊相關的産品知識。
本文原創釋出于人人都是産品經理,未經作者許可,禁止轉載。
題圖來自Unsplash,基于 CC0 協定。
該文觀點僅代表作者本人,人人都是産品經理平台僅提供資訊存儲空間服務。