使用NPOI的DataTable导出Excel表格

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dhywjx/article/details/82874537

刚从学校步入工作,阴差阳错的进入了以.net为主的软件公司实习。说实话还是有些陌生的,最近项目中经常遇到需要导出Excel表的功能,秉着前人栽树后人乘凉的思想,虽然也查阅了很多种导出Excel的方法,看过各种大佬写的导出方法。有简单的也有复杂的,所以之前我在项目中使用的导出Excel的方法各种各样。直到遇到了NPOI。参考网上的方法,有的代码写的很长。其实只需要一个方法就可以简单的导出。以DataTable为例进行Excel的导出。只需3步。

一、引入dll

将这两个dll添加引用。我使用的是NPOI2.3.0,下载地址:https://download.csdn.net/download/dhywjx/10692072

二、写方法

        /// <summary>
        /// DataTable导出Excel
        /// </summary>
        /// <param name="dt_result"></param>
        private void DataTabletoExcel(DataTable dt_result)
        {
            IWorkbook excel = new HSSFWorkbook();
            ISheet sheet;
            IRow row;
            //保存文件位置
            string SavePath = "";
            //导入excel名称
            string filename = "";
            //写入表名称
            sheet = excel.CreateSheet("报价单模板");
            //创建第一行标题
            row = sheet.CreateRow(0);
            //从左往右 ...
            row.CreateCell(0).SetCellValue("商品名称");
            row.CreateCell(1).SetCellValue("商品ID");
            row.CreateCell(2).SetCellValue("库存");
            row.CreateCell(3).SetCellValue("指导价");
            row.CreateCell(4).SetCellValue("平台售价");
            row.CreateCell(5).SetCellValue("商家售价");
            //存Excel的文件夹,先在项目中新建好,
            SavePath = Server.MapPath("../");
            //这个Excel文件的名称
            filename = "报价单模板";
            //写入DataTable中的数据
            for (int i = 0; i < dt_result.Rows.Count; i++)
            {
                //由于第一行写标题了所以是从第二行开始
                row = sheet.CreateRow(i + 1);
                //写这一行的数据
                for (int j = 0; j < dt_result.Rows.Count; j++)
                {
                    //同理也是从左往右写入数据
                    row.CreateCell(j).SetCellValue(dt_result.Rows[i][j].ToString());
                    sheet.AutoSizeColumn(j);
                }
            }
            //保存Excel的路径和文件名称拼接
            string url = SavePath + @"\excel\" + filename + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
            //写入文件
            FileStream xlsfile = new FileStream(url, FileMode.Create);
            excel.Write(xlsfile);
            xlsfile.Close();

            //==== 如果只想导出本地这样就已经OK了,下面是网页上客户端下载导出的Excel    =====
            FileStream fileopen = new FileStream(url, FileMode.Open);
            byte[] bytes = new byte[(int)fileopen.Length];
            fileopen.Read(bytes, 0, bytes.Length);
            Response.ContentType = "application/octet-stream";
            //页面下载时的文件名称
            Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("报价单模板.xls", System.Text.Encoding.UTF8));
            Response.BinaryWrite(bytes);
            fileopen.Close();
            Response.Flush();
            Response.End();
        }

三、调用这个方法

由于这个方法是传入DataTable,所以在传入前,做好类型的转换,当然不只是DataTable,其他类型也是可以导出Excel,这里就需要根据自己的需要来变形。^_^好了。刚实习,感觉还有好多要学习,一点点积累吧!

猜你喜欢

转载自blog.csdn.net/dhywjx/article/details/82874537