需求背景
最近專案中一個功能,需要使用者以Excel檔案的方式提供錄入資料。為了避免使用者誤操作給後續的檔案解析工作帶來額外的巨大工作量,我們需要對Excel模板檔案進行定製。以下圖為例

具體要求如下
- 鎖定Excel樣式,不能修改單元格樣式和位置;
- 限制特定單元格輸入內容的格式,比如電話號碼,日期等;
- 不允許修改深灰色部分的表頭,但是可以輸入和修改淺灰色的單元格內容;
限制單元格輸入格式
通過Excel的資料驗證功能就可以實現在輸入內容的同時進行校驗,只有滿足格式條件的資料才能儲存。使用方法比較簡單,首先選中你要校驗的單元格(比如下圖中的A列),然後點選【資料】選單下的【資料驗證】,根據具體的要求設定驗證條件即可。
通過內建的驗證條件,以及可以使用公式的自定義驗證,我們可以對很多複雜的資料格式進行校驗。因為我們專案中的實際需求不算太複雜,所以這篇文章中僅僅展示了部分Excel的功能。

日期
在資料驗證的下拉框【允許】中,選擇日期,然後指定一個範圍。本例中指定了一個非常寬的範圍,目的僅僅是為了保證使用者輸入的是一個合法的日期,不會出現2月30日這種手滑失誤。

作為一個使用者友好的程式,在使用者輸入出錯的時候,應該給出一個明確的資訊,指導使用者修改錯誤。所以我們在設定了驗證條件之後,還需要配置出錯警告資訊,當然如果一定要偷懶的話也可以省略這一步。如下圖

整數和小數
數字類的驗證比較類似,這裡僅僅舉一個例子,如下

手機號碼
對於像身份證,電話號碼這一類資訊,沒有現成的驗證條件可以使用。不過Excel提供了自定義這種驗證方式,可以通過寫一個公式,來曲線救國完成複雜資料格式的驗證。
還是以手機號碼為例,本質上是要求輸入一個11位長度的數字,那麼我們就把驗證拆分為同時成立的兩個條件:
- 長度11位,公式 LEN(D1)=11
- 必須是數字,公式 ISNUMBER(D1)
如下圖,我們在【允許】下拉框中選擇【自定義】,然後在下方的【公式】裡面輸入公式

鎖定樣式
為了避免使用者無意或者有意的修改Excel模板,我們需要對樣式進行鎖定。鎖定之後的檔案,使用者只能在我們規定的單元格內輸入內容,並且不能隨意修改單元格樣式。Excel提供的保護工作表功能可以幫助我們實現這個願望,僅僅需要點幾下滑鼠,我們即可達成目標。
首先我們要選定不需要鎖定的單元格,這裡要解釋一下,為啥是選不需要鎖定?在本例中,淺灰色的單元格是錄入區域,也是我們不需要鎖定的部分。我們需要保護的是非錄入區域,比如表頭。Excel預設是對所有單元格開啟了鎖定選項的,所以我們要把非錄入區域的鎖定取消,否則使用者就沒法錄入資料了。
如下圖,我們選中所有淺灰色單元格,然後滑鼠右鍵點選【設定單元格格式】。

在設定單元格格式視窗中,取消【鎖定】。記住,預設是勾選的,一定要取消,一定要取消,一定要取消!

然後的任務就簡單了,在【稽核】選單中找到並點選【保護工作表】,提供用於解鎖的密碼,大功告成。
PS:如果有更多特殊要求,可以修改允許此工作表的所有使用者進行中的選項來完成更細粒度的控制。
