MVC导入Excel表格数据
MVC导入Excel表格数据
开发工具与关键技术:VisualStudio
作者:邹贺汗
撰写时间:2019.4.17
导入Excel表格首先要设置div,让这个div以弹窗的方式呈现, 用这个div来装table标签然后设置table的ID,用来装导入的Excel数据,这里我用了个插件是layui插件,用layui设置表头,配置分页,让表单初始化为空,让他打开的时候没有数据,等选中了文件在显示文件的内容就可以了,
设置div弹窗点击背景和esc的时候都不关闭动态模态框,
$("#modImportExaminee").modal({
backdrop:false,
Keyboard:false
});
上传Excel表格,保存到临时表
Js判断是否选中文件,如果选中重载表格数据到自己定义的路径去,没有则清除table。
控制器将导入的的Excel表格的数据保存到session,
首先声明一个类ReturnJson,设置状态、状态码、文本、附加数据,
充当类的基类,这些类提供对客户端已上载的单独文件的访问HttpPostedFileBase,参数名设置为和页面设置input的name一致,判断页面传过来的文件是否为Excel表格。
获取文件的后缀。如图:
然后判断工作簿中是否有工作表,声明一个对象列表,存放导入的数据信息。获取第一个工作表,PhysicalNumberOfRows 获取的是物理行数,也就是不包括那些空行(隔行)的情况。判断工作表中是否有数据。
NPOI.SS.UserModel.ISheet sheet =workbook.GetSheetAt(0);
if (sheet.PhysicalNumberOfRows> 0)
然后将数据装到DataTable中,定义datatable。
DataTable dtExcel = newDataTable();
获取标题行
NPOI.SS.UserModel.IRow rowHeader =sheet.GetRow(0);
获取表格列数,获取表格行数(最后一行下标+1),创建dataTable中的列,循环添加标题行中各个单元格的数据,遍历表头行中每一个单元格,获取标题行各个单元格的数据
int cellCount =rowHeader.LastCellNum;
int rowCount = sheet.LastRowNum +1;
for (int i =rowHeader.FirstCellNum; i < cellCount; i++)
{
DataColumn dtColumn = newDataColumn(rowHeader.GetCell(i).StringCellValue);
将获取到的标题行的数据放到dataTable中
dtExcel.Columns.Add(dtColumn);
}
读取Excel中的数据,(sheet.FirstRowNum) 第一行是标题。
for (int i = sheet.FirstRowNum +1; i < rowCount; i++)
{
//获取行(1、2、3...)数据
NPOI.SS.UserModel.IRow row =sheet.GetRow(i);
//创建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();
}
}
}
//新行添加到dataTable中
dtExcel.Rows.Add(dtRow);
}
//将每一条数据都添加到对象列表中
listStudentVo.Add(student);
ImportSuccess++;
}