如何实现数据导入

开发工具与关键技术: Visual Studio   导入数据 
作者:黎凤焕
撰写时间:2019年4月13日

在学习MVC的过程中,会用到数据的导入,把数据导入到数据库里面去,使用表格数据的时候,往往用到数据的导入。导入数据并不是直接导入数据,首先要构建一个模态框,让用户确认要导入的数据是否是准确的,如果是准确的再导入到数据库里面。如果不构建模态框,让用户直接导入数据就将数据导入到数据库里面,会造成不必要的麻烦,可能会导入了一些不需要的数据进数据库,这样可能会浪费用户的时间。
在导入数据之前,我们要借助模态框来显示导入Excel表格里面的数据,所以要构建一个页面,就是模态框。模态框里面用到一个临时表格,首先要构造表格,该表格用到的是layui里面的表格,layui 里面的表格,我们会用到它的渲染方式,所以要对表格进行渲染,把表格渲染出来。把表格构建好,渲染出来之后,通过导入数据按钮的单击事件把表格显示出来。首先,获取导入按钮,给它一个单击事件,打开模态框,一进模态框的时候,要对表格进行重置。当用到resetForm时,首先要引用插件才可以用,然后把模态框显示出来。当表格没有数据的时候,导入数据库的按钮是被禁用的,当有数据的时候,导入数据库的按钮才不会被禁用,才可以将数据导入到数据库。
$("#formImportExcel").resetForm(); —重置表单

---引用插件

$("#formImportExcel").resetForm();—禁用导入数据库的按钮
当页面上不仅只有一个模态框的时候,可以对这个模态框进行设置,把它的背景颜色去掉,这样做事为了防止两个模态框发生冲突,有的电脑会发生冲突,有的不会,为了防止它们发生冲突,把它的背景颜色去掉。
(背景时不关闭动态模态框,按下esc时不关闭动态模态框)
$("#modImportExaminee").modal({
backdrop: false,
keyboard: false
});
在导入数据之前,要给用户下载一个导入数据的模板,让用户按照模板里面的内容填写完整,加载数据到table里面,提交表单,然后启用保存到数据库的按钮,将数据导入到数据库里面。不同的浏览器的模板下载是不同的。
下载模板思路:
(1) 判断:类型是不是: .xls
string fileExtension = Path.GetExtension(file.FileName);
if (".xls".Equals(fileExtension) || “.XLS”.Equals(fileExtension))
1、获取读取的文件;
2、把文件转换为二进制数组;
3、二进制数组转成内存流;
MemoryStream excelFileStream = new MemoryStream(fileBytes);
4、利用NPOI把内存流中的数据读取成工作簿Excel
将内存流转化为工作簿
NPOI.SS.UserModel.IWorkbook workbook = new HSSFWorkbook(excelFileStream);
(2)工作簿中有工作表
工作簿中有工作表就查询出与表格相对应的信息,用来根据名称获取对应的ID,对对象列表,然后获取第一个工作表。
(3)工作表有数据:判断工作表中是否有数据
(4)数据准确性
定义datatable,将数据先装到datatable中,获取标题行,在获取表格列数和行数,创建dataTable中的列,循环添加标题行中各个单元格的值,通过遍历行中的每一个单元格,获取标题行各个单元格的数据,将获取到的标题行的数据放到datatable中,读取Excel中的数据,获取行(1、2、3…)数据,创建DataTable行,遍历excel中一行的所有单元格,遍历excel中一行的所有单元格。
if(sheet.PhysicalNumberOfRows>0){
DataTable dtExcel = new DataTable();
NPOI.SS.UserModel.IRow rowHeader = sheet.GetRow(1);
int cellCount = rowHeader.LastCellNum;
int rowCount = sheet.LastRowNum + 1;
for (int i = rowHeader.FirstCellNum; i < cellCount; i++)
{
DataColumn dtColumn = new DataColumn(rowHeader.GetCell(i).StringCellValue);
dtExcel.Columns.Add(dtColumn);
}
for (int i = (sheet.FirstRowNum) + 2; i < rowCount; i++)
{
NPOI.SS.UserModel.IRow row = sheet.GetRow(i);
DataRow dtRow = dtExcel.NewRow();
If(row!=null)
{
for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
{
dtRow[j] = row.GetCell(j).ToString();
}
}
}
dtExcel.Rows.Add(dtRow);
}
}
(5)数据都有,然后读取数据。
最后对导入的数据进行保存,记录好保存成功的条数,记录已经存在的数据,还要判断要保存的数据是否为空,如果为空就不可以将数据进行导入,判断导入的数据中是否已经有存在于数据库的数据,如果数据库中有要导入的数据,将不给予导入,最后判断数据有没有导入成功,记录保存成功的条数,提示导入的数据成功多少条,有没有导入失败。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值