Excel数据导入与导出

在导入数据的过程中要做到高效快速,就要用到Excel表格.
首先要准备的是Excel表格数据模板,在项目里准备好模板
在这里插入图片描述
重置表单
$("#formImportExcel").resetForm();

禁用保存到数据库的按钮,这是为了防止未导入Excel数据表格的误点操作。$("#btnSaveImport").prop(“disabled”, true);

弹出模态框,下载模板
function downImportTemplate()

上传Excel表格,保存到临时表
避免取消选择文件后触发上传
if ($("#fileUploadExecl").val() == “” || $("#fileUploadExecl").val() == undefined) {return;}

显示加载层提交表单,启用保存到数据库的按钮,表格数据重载,清空table,保存导入的Excel表格数据到数据库
function saveImport()
导出数据到Excel表格
获取当前表格数据的筛选条件,指定需要导出的数据!

基本思路:
1、获取读取的文件;
2、把文件转换为二进制数组;
3、二进制数组转成内存流;
4、利用NPOI把内存流中的数据读取成Excel

首先要在控制器引用NPOI
把session中的ImportExcel移除避免残留以前数据
Session.Remove(“ImportExcel”);

判断页面传过来的文件是否为Excel表格,获取文件的后缀
string fileExtension = System.IO.Path.GetExtension(file.FileName);

声明二进制数组存放文件
byte[] fileBytes = new byte[file.ContentLength];

将传入的文件转化为二进制的数组存入fileBytes
file.InputStream.Read(fileBytes, 0, file.ContentLength)

将二进制的数组转化为内存流
MemoryStream excelFileStream = new MemoryStream(fileBytes);

将内存流转化为工作簿
NPOI.SS.UserModel.IWorkbook Workbook=newNPOI.HSSF.UserModel.HSSFWorkbook(excelFileStream);

判断工作簿中是否有工作表
if (workbook.NumberOfSheets > 0)

声明对象列表,存放导入的信息
List listStudentVo = new List();

获取第一个工作表
NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0);

获取的是物理行数,也就是不包括那些空行(隔行)的情况。
PhysicalNumberOfRows

判断工作表中是否有数据
if (sheet.PhysicalNumberOfRows > 0)

将数据装到DataTable中,定义datatable
DataTable dtExcel = new DataTable();

获取标题行
NPOI.SS.UserModel.IRow rowHeader = sheet.GetRow(0);

获取表格列数
int cellCount = rowHeader.LastCellNum;

获取表格行数(最后一行下标+1)
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) 第一行是标题

遍历excel中一行所有的单元格
新行添加到dataTable中
dtExcel.Rows.Add(dtRow);

遍历dataTable中的数据
foreach (DataRow row in dtExcel.Rows)
以上就是excel数据的导入。导入数据时会弹出如下页面:
Excel数据导入与导出_第1张图片
首先也是创建Excel工作簿
HSSFWorkbook excelBook = new HSSFWorkbook();

创建工作表
NPOI.SS.UserModel.ISheet sheet1 = excelBook.CreateSheet("**");

创建表头行
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);

设置表头
row1.CreateCell(0).SetCellValue("**");

为Excel表格添加数据
for (int i=0;i< listStudent.Count();i++)

这里都跟导入差不多,创建行
NPOI.SS.UserModel.IRow rowTemp = sheet1.CreateRow(i+1);

添加数据
rowTemp.CreateCell(0).SetCellValue(listStudent[i].StudentNumber);

然后呢?为Excel文件命名
string fileName = “考生信息” + DateTime.Now.ToString(“yyyy-MM-dd-HH-mm-ss-ffff”) + “.xls”;

转化为内存流
MemoryStream ExcelStream = new MemoryStream();

将Excel文件写入内存流
excelBook.Write(ExcelStream);

输出之前调用Seek(偏移量,游标位置) 移动文件读取指针到指定的位置
/eek(0,Seek.begin)

第一个参数表示相对位置,第二个参数表示参照位置
ExcelStream.Seek(0, SeekOrigin.Begin);

MIME文件类型(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型
return File(ExcelStream, “application/vnd.ms-excel”, fileName);
以上就是excel数据的导出,导出相对简单,直接获取id里面的数据就可以了。

你可能感兴趣的:(Excel数据导入与导出)