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

2024-05-12 22:32

本文主要是介绍写一个关于使用NPOI实现一键导出,并在浏览器上面实现下载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实现效果如下:
在这里插入图片描述
浏览器直接请求我们服务端的文件;
具体步骤:
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();}

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

这篇关于写一个关于使用NPOI实现一键导出,并在浏览器上面实现下载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/983915

相关文章

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

Python轻松实现Word到Markdown的转换

《Python轻松实现Word到Markdown的转换》在文档管理、内容发布等场景中,将Word转换为Markdown格式是常见需求,本文将介绍如何使用FreeSpire.DocforPython实现... 目录一、工具简介二、核心转换实现1. 基础单文件转换2. 批量转换Word文件三、工具特性分析优点局