导入Excel
开发工具与关键技术:VS MVC(Microsoft Visual Studio) C# DW SQL
作者:翁一凯
撰写时间:2020年8月8日
导入Excel
一目录:1下载模板 .xls
2.用户根据模板填写数据
3.用户上传数据-导入
----导入部分思路
1.获取上传的文件;
2.把文件转换为二进制数组;(因为所有的文件都是0和1)
3.二进制数组转成内存流;
4.利用NPOI把内存流中的数据读取成Excel
5.使用NPOI读取数据
1.获取上传的文件;
①使用XMLHttpRequest上传文件
②打开指定的URL 文件上传使用POST提交
③先获取模板文件的路径,然后判断模板是否存在,文件存在获取文件名称,并且以流的形式返回文件
如下图:
2.把文件转换为二进制数组;(因为所有的文件都是0和1)
①判断文件后缀名:(StringComparison.CurrentCultureIgnoreCase):忽略大小写(.xls)
②转换成二进制数组需要声明一个和文件大小一致的二进制数组
如:byte[] fileBytes = new byte[excelFile.ContentLength];
excelFile.ContentLength:指定一个文件内容长度一致的二进制数组来存放;
③将上传的文件转换成二进制数组(把流转换到数组里面)
将 InputStream(流) 用Read(fileBytes, 0, fileBytes.Length) 把数据读到二进制的(fileBytes)数组里面去(把流转换到数组里面)
如下图:
3.二进制数组转成内存流;
①再将这个二进制数组转为 内存流(MemoryStream)
如: MemoryStream excelMemoryStream = new MemoryStream(fileBytes);
②再将内存流转为工作簿(HSSFWorkbook)
如:NPOI.SS.UserModel.IWorkbookworkbook=newNPOI.HSSF.UserModel.
HSSFWorkbook(excelMemoryStream);
4.利用NPOI把内存流中的数据读取成Excel
①判断是否存在工作表,然后获取出第一个工作表
如:NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0);
GetSheetAt(0):根据索引去获取
②判断工作表中是否存在行
PhysicalNumberOfRows:代表物理存在的行,不包含空行
③将数据保存到DataTable中
DataTable是C#中的一个表格数据 它的效果和Excel差不多(格式)
④获取Excel
获取的时候会用到的
FirstCellNum:获取某行第一个单元格下标
LastCellNum:获取某行的列数 !!!!!
FirstRowNum:获取第一个实际行的下标
LastRowNum:获取最后一个实际行的下标
⑤获取列的时候是通过行去获取,获取行的时候通过工作表获取(找各自的依赖对象)
Trim():去空格
5.使用NPOI读取数据
①(sheet.FirstRowNum+2) 为什么是2 (一般)第一行是说明行 第二行是标题行,第三行开 始 参数数据(索引从0开始 )
②去除DataTable空行,先循环完再移除,不要再循环中移除空行,否则非常危险
③bool rowDataIsEmpty = true;//标识是否是空行-默认为空行
Excel插入的图片无法通过NPOI读取,因为图片被编码过,一般导入也不会放图片,图片浮动 在行和列之外。