写一个关于使用NPOI实现一键导出,并在浏览器上面实现下载

10 篇文章 0 订阅
4 篇文章 0 订阅

实现效果如下:
在这里插入图片描述
浏览器直接请求我们服务端的文件;
具体步骤:
1.NPOI导入数据库文件,并存在服务器文件夹下面;
2.实现浏览器访问并且请求下载;

实现NPOI存储数据库文件到excel中

 public static void SaveExcel(string fileName,List<orderInfo> orderInfos)
 {
     IWorkbook wb = new HSSFWorkbook();
     ISheet sheet = wb.CreateSheet("订单表");//数据名
     var row = sheet.CreateRow(sheet.LastRowNum);

     //创建标题行
     int i = 0;
     //获取到所有的功能属性,也就是映射list表属性
     PropertyInfo[] propertyInfos = typeof(orderInfo).GetProperties(); //获取其属性名字
     //遍历所有属性
     foreach (var property in propertyInfos)
     {
         object[] obj = property.GetCustomAttributes(typeof(DescriptionAttribute), true); //获取属性里面的注解
         if (obj.Length > 0)
         {
             //创建一列,为起始列
             row.CreateCell(i).SetCellValue(((DescriptionAttribute)obj[0]).Description); //向里面填充属性值
             i++;
         }
     }

     int j = sheet.LastRowNum +1;//用来做创建行的功能,一直往下添加
     int n = 0;//用来给每一列进行赋值操作,用来添加列数
     //给数据填充到表格中
     foreach (var orderInfo in orderInfos)
     {
         n = 0;
         row = sheet.CreateRow(j++);
         //获取每一行的属性值
         var items = orderInfo.GetType().GetProperties();//获取其公共属性
         foreach(var itemPropSub in items)
         {
             //走完以后要从每一行的头开始,进行增加,则要回0;
             var obj = itemPropSub.GetCustomAttributes(typeof(DescriptionAttribute), true);
             if (obj.Length > 0)
             {
                 row.CreateCell(n).SetCellValue(itemPropSub.GetValue(orderInfo, null) == null ? "":
                     itemPropSub.GetValue(orderInfo, null).ToString());//给其添值,如果为空的话就是空值,否则转为字符串写入
                 n++;
             }
         }
     }

     MemoryStream ms = new MemoryStream();
     //创建一个数据流进行数据的保存
     wb.Write(ms);
     ms.Flush();
     ms.Position = 0;//设置流的当前位置
     FileStream fileStream = new FileStream(fileName,FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite);//写入数据
     ms.WriteTo(fileStream);
     ms.Close();
     ms.Dispose();
     fileStream.Close();
     wb.Close();
     
 }

数据库内容得先查询并保存到list表中:

public class orderInfo { 
    [Description("订单编号")]
    public string orderId { get; set; }
    [Description("付款时间")]
    public string payTime { get; set; }
    [Description("用户支付状态")]
    public string userPayStatue { get; set; }
    [Description("站点支付状态")]
    public string sitePayStatue { get; set; }
    [Description("所有支付状态")]
    public string allPayStatue { get; set; }
    [Description("快递发货状态")]
    public string expressStatue { get; set; }
}

2.上面实现了保存数据到excel中;

3.实现浏览器请求文件并下载

//这边已经存好数据值了
  var nowTime = DateTime.Now.Ticks.ToString();
   string filePath = context.Server.MapPath("/excelAll/")+System.IO.Path.GetFileName("订单数据表_"+nowTime+".xls");
   SaveExcel(filePath, orderInfos);
   //进行本地的数据流读取
   FileInfo fi = new FileInfo(filePath);
   if (File.Exists(filePath))
   {
       context.Response.Clear();
       context.Response.Buffer = true; //设置<span style="color: rgb(51, 51, 51); line-height: 24px; white-space: pre-wrap;">输出页面是否被缓冲</span>
       context.Response.Charset = "GB2312"; //设置了类型为中文防止乱码的出现 
       context.Response.AppendHeader("Content-Disposition", String.Format("attachment;filename={0}", HttpUtility.UrlEncode("订单数据表_" + nowTime + ".xls"))); //定义输出文件和文件名 
       context.Response.AppendHeader("Content-Length", fi.Length.ToString());
       context.Response.ContentEncoding = Encoding.Default;
       context.Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 
       context.Response.WriteFile(fi.FullName);
       context.Response.Flush();
       context.Response.End();
   }

这样子就能实现上面导出的效果了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值