上一節使用了LinqToExcel和CloseXML對Excel表進行導入和導出的簡單操做,你們能夠跳轉到上一節查看:javascript
ASP.NET MVC5+EF6+EasyUI 後臺管理系統(63)-Excel導入和導出css
本節演示一些比較複雜的模型場景html
上次的場景:(標準的Excel表格格式)java
制定的場景:(指定表模的場景,多張sheet,不是橫排的形式)數據庫
實現思路:利用LinqToExcel循環讀取Sheet,再循環讀取Sheet指定單元格的內容數組
(其實Excel是一個二維數組,能夠直接讀取諸如:B1:C1的單元格數據)ide
上次的代碼咱們已經有了上傳Excel功能,此次就不須要放出上傳代碼了。post
在業務層添加校驗Excel的方法:能夠效仿上次的普通導入url
public bool CheckImportBatchData(string fileName, List<Spl_PersonModel> personList, ref ValidationErrors errors)
頭部分一樣保持不變:spa
var targetFile = new FileInfo(fileName); if (!targetFile.Exists) { errors.Add("導入的數據文件不存在"); return false; } var excelFile = new ExcelQueryFactory(fileName);
下面是核心代碼:
var sheetList = excelFile.GetWorksheetNames();//IEnumberable
因爲其返回類型是IEnumberable全部咱們直接一個foreach就全出來了
foreach (var sheet in sheetList) { //得到sheet對應的數據 var data = excelFile.WorksheetNoHeader(sheet).ToList(); }
視乎到這一步都很簡單了!接下來咱們只要分解data的數據便可,通過跟蹤data是一個二維數據
好了,如今更加清晰了,我要得到光頭強兩個字。那麼只須要data[2][3]就能夠了
//判斷信息是否齊全 if (data[1][2].Value.ToString() == "") { errorMessage.Append("姓名不能爲空"); }
var person = new Spl_PersonModel(); person.Id = ""; person.Name = data[1][2].Value.ToString(); person.Sex = data[2][2].Value.ToString(); person.Age = Convert.ToInt32(data[3][2].Value); person.IDCard = data[4][2].Value.ToString(); person.Phone = data[5][2].Value.ToString(); person.Email = data[6][2].Value.ToString(); person.Address = data[7][2].Value.ToString(); person.Region = data[8][2].Value.ToString(); person.Category = data[9][2].Value.ToString();
仍是 public void SaveImportData(IEnumerable<Spl_PersonModel> personList)方法
效果仍是同樣的
若是有時候你的文件處理的邏輯不少,時間好幾秒,那麼你可能須要加個進度提示
簡單的loading代碼以下:(開始導入時候調用,結束的時候關閉。)
<div id="over" class="over"></div>
<div id="layout" class="layout"><img src="~/Content/images/loading.gif" /></div>
<script type="text/javascript">
function showLoading() {
$("#over").show(); $("#layout").show(); } function hideLoading() { $("#over").hide(); $("#layout").hide(); } </script> <style type="text/css"> .over{top:0;left:0;z-index:9999999;width:100%;height:100%;opacity:.5}.layout,.over{position:absolute;display:none}.layout{top:40%;left:40%;z-index:100000000;width:20%;height:20%;text-align:center} </style>
效果以下:
有時候咱們的表模就是這樣的,並非都是列表形式,這是,這個方法就幫到我你,簡單粗暴
下載代碼:動手體驗一下,穩固知識
連接:http://pan.baidu.com/s/1i48Lg8l 密碼:vq0g