获取到导入考生的按键Id,写出它的点击事件,让它打开导入Excel表格的模态框.
代码如下:
function openImportExcel() {
重置表单(清空表单)
$("#formImportExcel").resetForm();
禁用保存到数据库的按钮(因为还没有数据,所以先禁用导入数据库的按钮,防止把空数据导入数据库)
$("#btnSaveImport").prop(“disabled”, true);
清空临时表(在导入Excel表格前,需要先把数据存放在临时表里,所以在导入数据前先要清空临时表)
tabStudentImport.reload({
url:"",
data: []
});
背景时不关闭动态模态框,按下esc时不关闭动态模态框
$("#modImportExaminee").modal({
backdrop: false,
keyboard: false
});
弹出模态框
$("#modImportExaminee").modal(“show”);
}
然后下载导入数据的模板.
function downImportTemplate() {
window.open(“DownImportTemplate”);
}
这里首先打开一个新的窗口,并在窗口中装载指定URL地址的网页.然后引用控制器的方法.
控制器的方法如下:
public ActionResult
DownImportTemplate()
{
获取模板路径
string filePath = Server.MapPath("~/Document/Template/考生信息导入模板.xls");
判断模板是否存在
if (System.IO.File.Exists(filePath))
{
//获取文件名称
string fileName = Path.GetFileName(filePath);
//返回文件
return File(new FileStream(filePath,FileMode.Open),
“application/octet-stream”,fileName);
}
else
{
return
Content(“模板文件不存在,请联系系统运维人员。”);
}
}
声明一个string的变量,然后获取到模板的路径,先作一个判断,判断出模板是否存在,
是,就继续获取到文件的名称,然后返回文件,把它返回到页面,让页面引用控制器的方法.否,就给出提示.
页面部分:
上传Excel表格,保存到临时表
function upExcel() {
避免取消选择文件后触发上传
if ($("#fileUploadExecl").val()
== “” || $("#fileUploadExecl").val()
== undefined) {return; }
显示加载层
var layIndex = layer.load();
提交表单(这里同新增和修改一样使用到插件提交数据表单)
$("#formImportExcel").ajaxSubmit(function
(msg)
{
layer.close(layIndex);
if (msg.State) {
启用保存到数据库的按钮
$("#btnSaveImport").prop(“disabled”, false);
表格刷新
tabStudentImport.reload({
url: “SelectSessImportStudent”});
layer.alert(msg.Text, {icon:1,title:“提示”});
}
else {
清空table
tabStudentImport.reload({
url: ‘’,
data: []
});
layer.alert(msg.Text, { icon: 0, title: “提示” });
}
});
}
保存导入的数据到数据库
function
saveImport()
{
打开加载层
var
layIndex = layer.load();
请求保存导入的数据的url
$.post(“SaveImport”, function
(Msg) {
关闭加载层
layer.close(layIndex);
关闭模态框
$("#modImportExaminee").modal(“hide”);
输出
layer.alert(Msg, { icon: 0, title: “提示” });
刷新
searchTabStudent();
});}
控制器部分:
思路:
1、获取读取的文件;
2、把文件转换为二进制数组;
3、二进制数组转成内存流;
4、利用NPOI把内存流中的数据读取成Excel
获取文件的后缀
string fileExtension = System.IO.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 NPOI.HSSF.UserModel.HSSFWorkbook(excelFileStream);
最后经过多种判断后,把导入到Excel表格的数据导入到数据库中去.