尝试把数据批量导入
导入也是一个新增,不过它与普通的新增不同,普通的新增是一条条地添加数据,而导入是批量地添加数据,并且它也比较特殊,它是不可以直接把数据导入到数据库里面的,它还需要一个表格的模板才能新增。在导入数据库之前要把它放入一个临时的表格里面,先让用户浏览检查一遍数据是否准确,职业数据准确才能确认导入。
一、 弹出模态框
一、 创建模板
-
先打开项目的文件夹,然后新建个Document文件夹用来放置表格的模板,把表格的模板复制进去即可。
-
下载模板,然后让下载模板的按钮点击地把模板下载过来,每个浏览器的下载路径可能步一样,文件的位置按浏览器的情况而定。接着就是用代码的方式找到具体的模板位置。
-
先获取前面系统的路径,再通过拼接后面文件的路径,这样的路径找到的就是我们需要的文件了。接着把它转换成流的格式输出,这时还要判断一下流的格式能不能读取到,能读取的话就用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("模板文件不存在,请联系开发人员。");
}
}
- 点击下载按钮后,浏览器打开一个新的页面,因为不同的浏览器打开的下载页面是不同的,只要在视图上给它open这个方法,后面再写一个模板文件的路径,这样浏览器就会自动匹配到它并打开对应的下载框,然后使用它进行下载即可
//下载模板
function downImport () {
window.open('/Examination/SetExam/DownImporte');
}
三、 导入表格
-
模板表格下载后,就是给它填写数据了,但是它的数据也不是乱输的,它的表格的列输入的数据要和数据库的字段属性相对应的,如果输入的数据不符合要求,肯定是录不进去的。
-
为了防止录入的数据出错,这就需要在录入之前判断数据的准确性。
第一步就先获取文件的后缀,用来判断文件是否存在,记得下面的都是层级嵌套判断的
string postfix = Path.GetExtension(file.FileName);
- 然后就用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.
NPOI.SS.UserModel.IRow rowHeader = sheet.GetRow(1);
int cellCount = rowHeader.LastCellNum; //列数
int rowCount = sheet.LastRowNum + 1; //行数
- 再遍历行的每个单元格,获取到各个单元格的数据,记得读取数据时的第一行是不需要录入数据库的,所以它可以不读取的。