C#导入导出

在系统中的都是些表格数据,并且是存放到数据库中的。表格数据的存放最常见的就是Excel,对于业务数据来说存放到数据库更安全,而Excel虽然存放方便但安全性和低。不过它们之间也是可以数据交互的,所使用的方法只需要导入和导出数据,需要使用NPOI插件(这两种方法对于Excel格式的操作最好使用xls,最新的Excel格式使用的是xlsx,为了版本的兼容最好是使用xls格式)。
一、 导入
1.对于每个系统模块都存在有不同表的数据,而不同的表就会有不同的字段。所以用到的导入模板也不一样,对于系统而言肯定不会让用户自己做模板,一般都会在系统里把模板做好直接下载模板。
在这里插入图片描述 在这里插入图片描述
事先在项目中添加一个文件夹(Document),这个文件夹中存放Excel模板文件。点击页面下载模板按钮使用open()方法直接调用浏览器的下载功能。
C#导入导出_第1张图片
这些都是固定的写法。Sercer.MapPath()方法是返回与Web服务器上的指定虚拟路径相对应的物理文件路径。意思就是通过给出的虚拟路径,然后在服务器上找到实际文件的路径。
然后判断一下该路径上是否存在有这个文件,如果没有就返回提示,如果有就获取到文件名称,再以文件流的形式把文件返回给页面,最终实现下载模板的操作。
在这里插入图片描述
按照下载的模板规范填写数据,然后进行导入数据操作。
在html中input有一个file类型的type属性,它专门用来选择文件的。
在这里插入图片描述
2. 文件上传的方法一般采用的是XMLHttpRequest。点击导入按钮,通过原生js的写法获取到存放有文件的input中的文件,获取到的files的值是一个js的对象数组。而选择的文件只有一个,那么可以通过索引为零来获取到文件。
在这里插入图片描述
使用XMLHttpRequest上传的数据需要转换成表单数据类型(FormData对象)进行上传。
在这里插入图片描述
通过append()方法将数据添加到formData对象后上传数据格式处理完毕,直接创建XMLHttpRequest对象,然后指定提交方式并通过路径上传将数据提交给后台,处理完数据的返回值是一个XML对象,需要将其反序列化为JSON对象。
C#导入导出_第2张图片
3.数据传入后台进行处理,首先需要判断上传文件是否是一个Excel文件。
在这里插入图片描述
使用Path去获取文件的后缀名,然后再通过Equals对比判断文件后缀名是否为(.xls)Excel文件类型,判断该文件符合条件便进行数据的处理。
C#导入导出_第3张图片
将文件一级一级转换,先转换成二进制数组,再由二进制数组转换成内存流,最后转换为一个工作簿。工作簿是就是Excel原称,里面存有多个工作表,工作表中记录着数据,按照这个原理就可以获取到表内的数据。
C#导入导出_第4张图片
判断工作表是否存在且工作表中是否有数据,对于Excel来说,里面的网格只是虚拟存在,肉眼可见但没有数据的话是不存在有单元格的。
C#导入导出_第5张图片
将数据保存到DataTable中,在NPOI中有四个方法,可以通过这四个方法获取到单元格的坐标。
FirstCellNum:获取某行第一个单元格下标,LastCellNum:获取某行的列数 !!!!!,FirstRowNum:获取第一个实际行的下标,LastRowNum:获取最后一个实际行的下标。
使用获取列数的方法通过for循环遍历获取到的标题行,将每一个获取到的单元格添加到DataTable中(Columns:获取属于该表的列的集合)。
在这里插入图片描述
这样就把标题行创建完成。然后根据模板样式第三行才是数据,所以要根据索引为2来获取到数据,这里要使用两个for循环来获取数据。
在这里插入图片描述
第一个循环行数据并判断行不为空,然后在FormData中创建一个行。
在这里插入图片描述
获取到循环的行数据再第二个循环行中的列数据,添加到创建行中。循环完一行的数据之后再将创建行数据添加到FormData中。
在这里插入图片描述
在所有数据处理完成之后还需要清除一下空行数据。
在这里插入图片描述
文件数据最终处理成一个虚拟表格对象,然后可以先查询出对应需要新增的表的ToList数据,然后通过循环遍历FromData中的行数据,实例化创建出空表对象,将每个字段的对应数据赋值给对应表的字段。最后将实例化表对象调用C#新增方法将数据添加到数据库。
C#导入导出_第6张图片
上图是对应字段赋值的例子,需要在for循环外再创建一个对象列表,用于存放所有数据,因为通过上面的赋值只存在有一条数据,在循环结尾要将每一条数据添加到对象列表中。
在这里插入图片描述
最后将对象列表的数据添加到数据库中。
在这里插入图片描述
二、 导出
数据的导出其实就是将数据下载下来,并且是一个Excel文档,同样通过模板下载的方式直接使用window.open()方法调用浏览器的下载功能然后将数据经过处理后转换成Excel文档。
导出的操作要比导入简单一点,首先是需要查询出你所有要导出的数据(一般根据查询条件,查询出多少条数据再导出多少条数据)。
最简单的方式就是直接创建出一个完整的Excel工作簿,然后将数据回填。
C#导入导出_第7张图片
1.通过固定格式去创建出一个工作表设置好标题,然后将单元格合并就有了一个拥有标题的Excel空表。
在这里插入图片描述
合并的单元格列数为6列。
在这里插入图片描述
2.然后根据实际数据设置标题行。
在这里插入图片描述
通过上图创建出一行,然后通过设置每个单元格数据设置标题。
在这里插入图片描述
3.通过for循环查询需要导出数据列表每循环一次创建一行,并将每个单元格赋值为列表通过索引获取到当前行数据的对应字段值。
在这里插入图片描述
4.行数据创建完成之后就可以提交数据。
在这里插入图片描述
提交下载的文件需要有一个名称,这里通过一个字符串拼接当前时间加上文件后缀名组合成一个名称代表导出的是什么数据和什么时间导出的表。
然后将赋值完成的工作簿写入流,然后在返回之前先定义从文件流的开始位置读取数据,最后以Excel文件类型返回。
在这里插入图片描述
导出成功。

你可能感兴趣的:(C#四大核心知识点,c#,jquery)