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

相关文章

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

MySQL 衍生表(Derived Tables)的使用

《MySQL衍生表(DerivedTables)的使用》本文主要介绍了MySQL衍生表(DerivedTables)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录一、衍生表简介1.1 衍生表基本用法1.2 自定义列名1.3 衍生表的局限在SQL的查询语句select

MySQL 横向衍生表(Lateral Derived Tables)的实现

《MySQL横向衍生表(LateralDerivedTables)的实现》横向衍生表适用于在需要通过子查询获取中间结果集的场景,相对于普通衍生表,横向衍生表可以引用在其之前出现过的表名,本文就来... 目录一、横向衍生表用法示例1.1 用法示例1.2 使用建议前面我们介绍过mysql中的衍生表(From子句