写一个关于使用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

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详