ASP.NET MVC5+EF6+EasyUI 後臺管理系統(63)-Excel導入和導出-自定義表模導入

系列目錄

前言

上一節使用了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);

下面是核心代碼:

1.得到Excel全部的sheet

var sheetList = excelFile.GetWorksheetNames();//IEnumberable

因爲其返回類型是IEnumberable全部咱們直接一個foreach就全出來了

2.得到sheet內部的表格數據

foreach (var sheet in sheetList)
{
    //得到sheet對應的數據
    var data = excelFile.WorksheetNoHeader(sheet).ToList();
}

視乎到這一步都很簡單了!接下來咱們只要分解data的數據便可,通過跟蹤data是一個二維數據

 

3.得到單元格內容

好了,如今更加清晰了,我要得到光頭強兩個字。那麼只須要data[2][3]就能夠了

//判斷信息是否齊全
if (data[1][2].Value.ToString() == "")
{
    errorMessage.Append("姓名不能爲空");
}

4.模型校驗成功後,添加到List中來,最後集合添加到數據庫

   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();

5.保存數據調用簡單類型的便可

仍是 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

相關文章
相關標籤/搜索