尝试把数据批量导入

导入也是一个新增,不过它与普通的新增不同,普通的新增是一条条地添加数据,而导入是批量地添加数据,并且它也比较特殊,它是不可以直接把数据导入到数据库里面的,它还需要一个表格的模板才能新增。在导入数据库之前要把它放入一个临时的表格里面,先让用户浏览检查一遍数据是否准确,职业数据准确才能确认导入。

一、 弹出模态框

尝试把数据批量导入

一、 创建模板

  1. 先打开项目的文件夹,然后新建个Document文件夹用来放置表格的模板,把表格的模板复制进去即可。

  2. 下载模板,然后让下载模板的按钮点击地把模板下载过来,每个浏览器的下载路径可能步一样,文件的位置按浏览器的情况而定。接着就是用代码的方式找到具体的模板位置。

  3. 先获取前面系统的路径,再通过拼接后面文件的路径,这样的路径找到的就是我们需要的文件了。接着把它转换成流的格式输出,这时还要判断一下流的格式能不能读取到,能读取的话就用File把它读取出来,反之就说明文件不存在。

public ActionResult DownImportTemp(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. 点击下载按钮后,浏览器打开一个新的页面,因为不同的浏览器打开的下载页面是不同的,只要在视图上给它open这个方法,后面再写一个模板文件的路径,这样浏览器就会自动匹配到它并打开对应的下载框,然后使用它进行下载即可

//下载模板

 function downImport () {
window.open('/Examination/SetExam/DownImporte');
    }

三、 导入表格

  1. 模板表格下载后,就是给它填写数据了,但是它的数据也不是乱输的,它的表格的列输入的数据要和数据库的字段属性相对应的,如果输入的数据不符合要求,肯定是录不进去的。
    尝试把数据批量导入

  2. 为了防止录入的数据出错,这就需要在录入之前判断数据的准确性。

    第一步就先获取文件的后缀,用来判断文件是否存在,记得下面的都是层级嵌套判断的
    

string postfix = Path.GetExtension(file.FileName);

  1. 然后就用NPOI的方法把它导出来,因为直接传过来的数据是无法和页面的数据进行对接的,所以就先声明一个二进制数组用来存放文件,然后把它转换成二进制数组,接着把它读取出来后把它存放到byte[]的数组里面去,再把二进制数组转换成内存流,再然后就将内存流转换成工作簿。

byte[] fileBytes = new byte[file.ContentLength];

file.InputStream.Read(fileBytes, 0, file.ContentLength);

MemoryStream excelFileStream = new MemoryStream(fileBytes);

NPOI.SS.UserModel.IWorkbook workbook = new HSSFWorkbook(excelFileStream);

  1. 最后就用代码的方式把表格给画出来,表格主要有两部分,一是表头行,二是数据行。
    然后我们就先把第一行(表头行)获取到,因为第一行是提示,行数要加1.

NPOI.SS.UserModel.IRow rowHeader = sheet.GetRow(1);
int cellCount = rowHeader.LastCellNum; //列数
int rowCount = sheet.LastRowNum + 1; //行数

  1. 再遍历行的每个单元格,获取到各个单元格的数据,记得读取数据时的第一行是不需要录入数据库的,所以它可以不读取的。
    尝试把数据批量导入