【数据管理】 数据导入功能点

开发工具与关键技术:VS   后端
作者:陈芝番    
撰写时间:2020.04.19

目录

创建Excel临时表

数据导入

下载模板

保存导入数据到数据库

下载导入患者信息的模板

制作思路

控制器源代码如下

加载数据到table


数据管理导入功能点围绕创建Excel临时表,数据导入,下载模板,保存导入数据到数据库,下载导入患者信息的模板制作思路控制器源代码如下,加载数据到table

创建Excel临时表

 <div class="col-12 table-responsive">
       <table id="tabPatientImport"layui-filter="tabPatientImport"></table>
</div>

数据导入

<script type="text/html" id="tabPatientToolbar">
        <div class="layui-btn-container">
            <button type="button" class="btn btn-sm btn-primary mr-1" onclick="openImportExcel()">数据导入</button>         
        </div>
</script>

下载模板

 function downImportTemplate() {
            window.open('/Houtai/DownImportTemplate');
        }

保存导入数据到数据库

function saveImport() {
            var layerIndex = layer.load(0);
            $.post("SaveImport", function (returnJson) {
                if (returnJson.State == true) {
                    layer.close(layerIndex);
                    //关闭模态框
                    $("#modImportExaminee").modal("hide");
                    tabPatient = layuiTable.reload('tabPatient');
                }
                layer.alert(returnJson.Text, { icon: 1, title: "提示" });
            });
     }

下载导入患者信息的模板

    public ActionResult DownImportTemplate(HttpPostedFileBase file)
        {
            string filePath = Server.MapPath("~/Document/Template/患者信息导入模板.xls");
            if (System.IO.File.Exists(filePath))
            {
                获取文件的名称
                string strfileName = Path.GetFileName(filePath);
                return File(new FileStream(filePath, FileMode.Open), "application/octet-stream", strfileName);
            }
            else
            {
                return Content("模板文件不存在,请联系系统运维人员。");
            }
        }

制作思路:

(1)判断类型是不是: .xls   

  1.  获取读取的文件;
  2. 把文件转换为二进制数组;
  3. 二进制数组转成内存流;
  4. 利用NPOI把内存流中的数据读取成工作簿Excel    

(2)工作簿中有工作表

(3)工作表有数据

(4)数据准确性

(5)数据都有,然后读取数据。

控制器源代码如下:

try
            {
                把session中的ImportExcel移除避免残留以前数据
                Session.Remove("ImportExcel");
                获取文件的后缀
               (1)判断类型是不是: .xls
                string fileExtension = Path.GetExtension(file.FileName);
                if (".xls".Equals(fileExtension) || ".XLS".Equals(fileExtension))
                {
                    声明二进制数组存放文件
                    byte[] fileBytes = new byte[file.ContentLength];
                    将传入的文件转化为二进制的数组存入fileBytes
                    file.InputStream.Read(fileBytes, 0, file.ContentLength);
                    将二进制数组转化为内存流
                    MemoryStream excelFileStream = new MemoryStream(fileBytes);
                    将内存流转化为工作簿
                    NPOI.SS.UserModel.IWorkbook workbook = new HSSFWorkbook(excelFileStream);
                    (2)工作簿中有工作表
                    if (workbook.NumberOfSheets > 0)
                    {
                        对象列表
                        List<Patient> listStudentVo = new List<Patient>();
                        获取第一个工作表
                        NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0);
                        (3)工作表有数据                        
                        判断工作表中是否有数据
                        if (sheet.PhysicalNumberOfRows > 0)
                        {
                            (4)数据准确性
                            定义datatable
                            DataTable dtExcel = new DataTable();
                            将数据先装到datatable中                        
                            获取标题行--- 第二行,索引为1;第一行是说明
                            NPOI.SS.UserModel.IRow rowHeader = sheet.GetRow(1);
                            获取表格列数  
                            int cellCount = rowHeader.LastCellNum;
                            获取表格行数
                            int rowCount = sheet.LastRowNum + 1;
                            创建dataTable中的列,循环添加标题行中各个单元格的值
                            for (int i = rowHeader.FirstCellNum; i < cellCount; i++)
                            {
                                通过遍历行中的每一个单元格,获取标题行各个单元格的数据
                                DataColumn dtColumn = new DataColumn(rowHeader.GetCell(i).StringCellValue);
                                将获取到的标题行的数据放到datatable中;
                                dtExcel.Columns.Add(dtColumn);
                            }
                            读取Excel中的数据
                            (sheet.FirstRowNum) 第一行是说明;第二行是标题;第三行开始才是数据信息
                            for (int i = (sheet.FirstRowNum) + 2; i < rowCount; i++)
                            {
                                获取行(1、2、3...)数据
                                NPOI.SS.UserModel.IRow row = sheet.GetRow(i);//1
                                创建DataTable行
                                DataRow dtRow = dtExcel.NewRow();
                                if (row != null)
                                {
                                    遍历excel中一行的所有单元格
                                    for (int j = row.FirstCellNum; j < cellCount; j++)
                                    {
                                        if (row.GetCell(j) != null)
                                        {
                                            dtRow[j] = row.GetCell(j).ToString();
                                        }
                                    }
                                }
                                将填入数据的dtRow添入dtExcel
                                dtExcel.Rows.Add(dtRow);
                            }
                            int intSuccess = 0;
                          int intFail = 0;

加载数据到table

  function upExcel()
        {
            避免取消选择文件后触发上传
            if ($('#fileUploadExecl').val() == "" || $('#fileUploadExecl').val() == undefined) {
                return;
            }

猜你喜欢

转载自blog.csdn.net/qq_44554890/article/details/105617011