Visual Studio导出Excel

由于C#不支持直接进行Excel操作的,所以我们需要使用第三方组件。这里有两种,第一种是msoffice这一种有点麻烦,开发电脑跟运行电脑版本要一致,office版本也要一致包括小版本。第二种是NPOI,NPOI是一个库,它一开始只有JAVA版本叫做POI后面官方出了.NET版本所以叫NPOI。
第一步,检查自己项目中是否有NPOI库,如果没有引用NPOI的话就需要从这个项目“引用”那里鼠标右键添加引用,找到事先下载好的NPOI核心引用,然后添加进来就行了。
第二步,创建一个叫NPOI.HSSF.UserModel.HSSFWorkbook的工作簿,命名为workbook。有了工作簿还需要创建工作表,工作表命名为sheet1。创建工作表跟工作簿有点不同,工作簿要new(这里的意思是新建)一个工作簿,才表示创建。而工作表就不能使用new了。如果使用new的话就不知道这个工作表是谁的了,必须要从现有的工作簿创建工作表。然后你可以给这个工作表命名,命名的方法有两种第一种是先创建,再命名,第二种是写一个SetSheetName修改名字0代表第一个工作表的下标。
在这里插入图片描述
在这里插入图片描述

第三步,创建行。rowTitle是我给这个行的命名,标题行的意思。从哪里创建呢?从我刚才创建的工作表里面创建行,所以是sheet1.CreateRow(0);这里面的0也是下标的意思。
在这里插入图片描述

创建好行之后需要给这个行设置它的高度,Height的高度为二十分之一点,HeightInPoint高度为一点。后面加个s表示复数。在这里我给这个行设置了35个点的高度。
在这里插入图片描述

下图是创建单元格,跟前面一样还是NPOI.SS.UserModel。ICell在这里是单元格的意思。从行里面创建单元格出来,所以用创建的行来创建单元格,之前我们已经创建过行了,并且这个行有一个命名rowTitle。所以我们在rowTitle里面创建单元格。
在这里插入图片描述

创建好单元格之后再给这个单元格设置一个值,需要先给它命名,等号后面的就是单元格的内容if判断上面不为空就拼接一下标题跟日期。下面的ceel0.SetCellValue(strTitle)是单元格的值。
在这里插入图片描述

标题这一行单元格我们需要合并一下,AddMergedRegion意思是把这些单元格合并起来从什么地方开始合并,在这里CellRangeAddress是它的坐标意思。第一个参数0是指从哪一行开始合并(firstRow)第二个参数0是从哪一行结束合并(lastRow)第三个参数0是从哪一列开始合并(firstCol)第四个参数是从哪一列结束合并(lastCol)四个坐标刚好组成了一个四边形,这个四边形就是合并的单元格。在这里面0也是下标就是第一行或第一列的意思
在这里插入图片描述

设置边框线为实线,Left代表左边的实线Top代表上边的实线Right代表右边的实线Bottom代表下边的实线。Thin是单实线的意思。样式这些我就不多说了,毕竟要设置的样式还有很多。
在这里插入图片描述

用vs导出Excel它不会像Excel一样直接有待编辑的单元格(没有创建好,但是在你输值的时候会帮你自动创建一个单元格),我们需要自己创建,涉及到数量大的情况下我们需要用循环的方式来完成我们需要遍历一下数据,来创建部分行列。下面这些都是我事先写好的样式
在这里插入图片描述

然后把创建好的Excel输出到浏览器
在这里插入图片描述

最后再把Excel转化为流输出,MemoryStream这里如果有提示的话需要引用一下。用new定义一个内存流,然后将工作簿写入流。输出之前调用Seek设置它的偏移量,这个主要是保持流一定是从文件开始位置开始输出,如果不写偏移量可能会导致文件损坏。这儿偏移量为0。游标位置为Begin(开始)最后面我们需要返回一下这个流在这里是把这个流以文件的形式返回出去,双引号中的是规定好的文件类型,指定文件名称,浏览器下载的时候显示的名称。
在这里插入图片描述

因为可能会存在导出异常这种情况所以我们还需要写一个try catch把写的这些嵌套在下图的try里面,出现异常的话就返回一个“数据导出异常”提示。
在这里插入图片描述
在这里插入图片描述

Guess you like

Origin blog.csdn.net/weixin_44567391/article/details/107904054