NOPI将数据导出至EXCEL表格

article/2025/10/22 0:53:02

文章目录

  • 前言
  • 一、NPOI优势
  • 二、运行逻辑
  • 三、安装NOPI组件
  • 四、导出Excel---实现代码
  • 五、最终效果
  • 六、总结


前言

NPOI,就是POI的.NET版本。POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。


一、NPOI优势

  • 完全基于.NET 2.0,而非.NET 3.0/3.5
  • 读写速度快
  • 稳定性好
  • API简单易用,完全支持Excel格式

二、运行逻辑

三、安装NOPI组件

			NOPI组件安装非常简单,自行百度

四、导出Excel—实现代码

        //获取数据private string fGenerateReport(HttpContext context){string fileurl = "";try{Hashtable jsonranklists = new Hashtable();
#region 声明变量,接收JS中AJAX传输的数据string num = "";                                    //定位年月日string code = "";                                   //设备编号string txtdateStart = "";                           //开始时间string txtdateEnd = "";                             //结束时间if (!string.IsNullOrWhiteSpace(context.Request["num"])){num = context.Request["num"];}if (!string.IsNullOrWhiteSpace(context.Request["code"])){code = context.Request["code"];}if (!string.IsNullOrWhiteSpace(context.Request["num"]) && num == "1"){if (!string.IsNullOrWhiteSpace(context.Request["txtdateStart"])){txtdateStart = context.Request["txtdateStart"];}if (!string.IsNullOrWhiteSpace(context.Request["txtdateEnd"])){txtdateEnd = context.Request["txtdateEnd"];}}if (!string.IsNullOrWhiteSpace(context.Request["num"]) && num == "2"){if (!string.IsNullOrWhiteSpace(context.Request["txtdateStart"])){txtdateStart = context.Request["txtdateStart"];}if (!string.IsNullOrWhiteSpace(context.Request["txtdateEnd"])){txtdateEnd = context.Request["txtdateEnd"];}}if (!string.IsNullOrWhiteSpace(context.Request["num"]) && num == "3"){if (!string.IsNullOrWhiteSpace(context.Request["txtdateStart"])){txtdateStart = context.Request["txtdateStart"];}if (!string.IsNullOrWhiteSpace(context.Request["txtdateEnd"])){txtdateEnd = context.Request["txtdateEnd"];}}
#endregion//将数据传入BLL层查询所需数据放在List<String>中List<tb_ammeterdata> lS = bllreport.ERListexport(num, code, txtdateStart, txtdateEnd);string sExportFileName = ""; //导出的临时文件的名称string sExportFilePath = ""; //导出的临时文件路径try{HSSFWorkbook wb = BuildSwitchData(lS);//string sExportDir = HttpContext.Current.Server.MapPath("~") + "orderdocument"; //临时保存文件夹//根据不同条件生成Excel文件名称string sExportDir = Com.Common.Config.ConfigManage.fGetAppConfig("UploadUrl") + "report";if (num == "2"){sExportFileName = DateTime.Now.ToString("yyyyMMddHHmmss") + "月报表" + ".xls";}else if (num == "3"){sExportFileName = DateTime.Now.ToString("yyyyMMddHHmmss") + "年报表" + ".xls";}else{sExportFileName = DateTime.Now.ToString("yyyyMMddHHmmss") + "日报表" + ".xls";}//拼接Excel的地址sExportFilePath = sExportDir + "/" + sExportFileName;if (!Directory.Exists(sExportDir))Directory.CreateDirectory(sExportDir);using (FileStream file = new FileStream(sExportFilePath, FileMode.Create)){wb.Write(file);}}catch{HttpContext.Current.Response.Write("<script type='text/javascript'>alert('导出发生异常!');window.history.back();</script>");if (File.Exists(sExportFilePath))File.Delete(sExportFilePath);return "";}fileurl = Com.Common.Config.ConfigManage.fGetAppConfig("FileUrl")+ "report" +"/"+ sExportFileName;//HttpContext.Current.Response.ContentType = "application/vnd.ms-excel; charset=UTF-8";//HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + sExportFileName);//HttpContext.Current.Response.TransmitFile(sExportFilePath); //将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件//HttpContext.Current.Response.Flush();//if (File.Exists(sExportFilePath))//HttpContext.Current.Response.End();}catch (Exception ex){Com.Common.Utility.Log.WriteLogs("S:" + ex.Message);return "";}return fileurl;}//设置Excel样式private HSSFWorkbook BuildSwitchData(List<tb_ammeterdata> lS){try{HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = (HSSFSheet)wb.CreateSheet("电量统计报表"); //创建工作表(表格页面名称)sheet.CreateFreezePane(0, 1); //冻结列头行HSSFRow row_Title = (HSSFRow)sheet.CreateRow(0); //创建列头行row_Title.HeightInPoints = 19.5F; //设置列头行高#region 设置列宽sheet.SetColumnWidth(0, 50 * 256);sheet.SetColumnWidth(1, 24 * 256);sheet.SetColumnWidth(2, 37 * 256);sheet.SetColumnWidth(3, 22 * 256);sheet.SetColumnWidth(4, 20 * 256);sheet.SetColumnWidth(5, 20 * 256);#endregion#region 设置列头单元格样式HSSFCellStyle cs_Title = (HSSFCellStyle)wb.CreateCellStyle(); //创建列头样式cs_Title.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //水平居中cs_Title.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; //垂直居中HSSFFont cs_Title_Font = (HSSFFont)wb.CreateFont(); //创建字体cs_Title_Font.Boldweight = 700; //字体加粗cs_Title_Font.FontHeightInPoints = 12; //字体大小cs_Title.SetFont(cs_Title_Font); //将字体绑定到样式#endregion#region 生成列头for (int i = 0; i < 3; i++){HSSFCell cell_Title = (HSSFCell)row_Title.CreateCell(i); //创建单元格cell_Title.CellStyle = cs_Title; //将样式绑定到单元格switch (i){case 0:cell_Title.SetCellValue("序号");break;case 1:cell_Title.SetCellValue("抄表时间");break;case 2:cell_Title.SetCellValue("正向总有工电量(kW.h)");break;}}#endregionfor (int i = 0; i < lS.Count; i++){#region 设置内容单元格样式HSSFCellStyle cs_Content = (HSSFCellStyle)wb.CreateCellStyle(); //创建列头样式cs_Content.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //水平居中cs_Content.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; //垂直居中#endregion#region 生成内容单元格HSSFRow row_Content = (HSSFRow)sheet.CreateRow(i + 1); //创建行row_Content.HeightInPoints = 16;for (int j = 0; j < 3; j++){HSSFCell cell_Conent = (HSSFCell)row_Content.CreateCell(j); //创建单元格cell_Conent.CellStyle = cs_Content;switch (j){case 0:cell_Conent.SetCellValue(i);break;case 1:cell_Conent.SetCellValue(lS[i].creationtime);//这里是将creationtime定义成DateTime类型HSSFCellStyle hSSFCellStyle1 = (HSSFCellStyle)wb.CreateCellStyle();HSSFDataFormat format = (HSSFDataFormat)wb.CreateDataFormat();hSSFCellStyle1.DataFormat = format.GetFormat("yyyy/MM/dd hh:mm");cell_Conent.CellStyle = hSSFCellStyle1;break;case 2:cell_Conent.SetCellValue(lS[i].epplus);break;}}#endregion}return wb;}catch { return null; }}

五、最终效果

在这里插入图片描述

六、总结

本文主要讲了NPOI实现对数据库数据导出功能,NPOI目前有好几个assembly,每个的作用各有不同,开发人员可以按需加载相应的assembly。在这里大概罗列一下:

NPOI.Util 基础辅助库
NPOI.POIFS OLE2格式读写库
NPOI.DDF Microsoft Drawing格式读写库
NPOI.SS Excel公式计算库
NPOI.HPSF OLE2的Summary Information和Document Summary Information属性读写库
NPOI.HSSF Excel BIFF格式读写库


http://chatgpt.dhexx.cn/article/gha3C4n3.shtml

相关文章

RabbitMQ原理、集群、基本操作及常见故障处理

本次学习主要针对运维人员&#xff0c;和对rabbitmq不熟悉的开发人员。通过本次学习你将掌握rabbitmq 的基本原理、集群、基本运维操作、常见故障处理。 1、原理与概念 简介 AMQP&#xff0c;即Advanced Message Queuing Protocol&#xff0c;高级消息队列协议&#xff0c;是…

RabbitMQ简易原理及使用

黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战_哔哩哔哩_bilibili 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件_哔哩哔哩_bilibili 安装&#xff1a;CentOS8安装RabbitMQ 3.8.9_wcybaonier的博客-CSDN博客 // config改为conf&#xff0c;rabbitmq以后缀识别&…

RabbitMQ-详细讲解原理到使用

这里写目录标题 1.初识MQ1.1.同步和异步通讯1.1.1.同步通讯1.1.2.异步通讯1.2.技术对比&#xff1a; 2.快速入门2.1.安装RabbitMQ1.单机部署1.1.下载镜像1.2.安装MQ 2.2.RabbitMQ消息模型2.3.创建一个Demo工程2.4.入门案例2.4.1.publisher实现2.4.2.consumer实现2.5.总结 3.Spr…

rabbitmq基本原理

AMQP(高级消息队列协议) 是一个异步消息传递所使用的应用层协议规范&#xff0c;作为线路层协议&#xff0c;而不是API&#xff08;例如JMS&#xff09;&#xff0c;AMQP 客户端能够无视消息的来源任意发送和接受信息。 AMQP当中有四个概念非常重要 1. virtual host&#xff…

RabbitMQ 内部结构原理介绍

RabbitMQ简介 RabbitMQ是一个用Erlang语言开发的、实现了AMQP协议的消息中间件。 AMQP :&#xff08;Advanced Message Queue&#xff0c;高级消息队列协议&#xff09;它是应用层协议的一个开放标准&#xff0c;为面向消息的中间件设计&#xff0c;基于此协议的客户端与消息中…

Rabbitmq机制

1.发布与订阅 publish and subscribe 短信发送&#xff0c;消息订阅的功能一般会用到这个模式。 这个模式是通过路由器绑定消息队列来实现的&#xff0c;只要有队列绑定到这个路由器&#xff0c;就会接受改路由器的通知。 2.routing模式 路由模式 在发布订阅模式的基础增加了…

RabbitMQ 架构原理

1.RabbitMQ 架构原理 由于 RabbitMQ 实现了 AMQP 协议&#xff0c;所以 RabbitMQ 的工作模型也是基于 AMQP 的。理解这张图片至关重要。 1.1 Broker 中介 我们要使用 RabbitMQ 来收发消息&#xff0c;必须要安装一个 RabbitMQ 的服务&#xff0c;可以安 装在 Windows 上面也可以…

RabbitMq底层原理分析

RabbitMq消息中间件介绍&为什么要使用消息中间件&什么时候使用消息中间件 我们用java来举例子&#xff0c; 打个比方 我们客户端发送一个下单请求给订单系统&#xff08;order&#xff09;订单系统发送了 一个请求给我们的库存系统告诉他需要更改库存了&#xff0c; 我…

RabbitMQ集群原理介绍

文章目录 一、RabbitMQ默认集群原理1. RabbitMQ集群元数据的同步2. 为何RabbitMQ集群仅采用元数据同步的方式3. RabbitMQ集群发送/订阅消息的基本原理4. 客户端直接连接队列所在节点5. 客户端连接的是非队列数据所在节点7. 集群节点类型磁盘节点内存节点 8. 总结 二、RabbitMQ镜…

RabbitMQ的基本架构与实现原理

目录 1.RabbitMQ Exchange类型 2.RabbitMQ的数据存储 RabbitMQ整体逻辑架构 1.RabbitMQ Exchange类型 常用的交换器类型分为&#xff1a;Direct、Topic、 Fanout、Header 四种。 Fanout fanout类型的交换器会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中&…

Rabbit Mq 底层原理

为什么要用MQ&#xff1f;MQ有什么好处&#xff1f; 1、异步通信&#xff1a;通过异步通信&#xff0c;可以减少客户端等待时间&#xff0c;实现接口快速响应 2、系统解耦&#xff1a;对于复杂的系统&#xff0c;减小系统与系统之间的依赖 3、流量削峰&#xff1a;对于瞬时访问…

RabbitMQ工作原理以及常见面试题【2022版】

RabbitMQ工作原理图&#xff1a; Broker&#xff1a;接收和分发消息的应用&#xff0c;RabbitMQ Server 就是 Message Broker Virtual host&#xff1a;出于多租户和安全因素设计的&#xff0c;把 AMQP 的基本组件划分到一个虚拟的分组中&#xff0c;类似 于网络中的 namespac…

RabbitMQ原理简单介绍

其实这篇博客&#xff0c;也算不上是什么原理&#xff0c;只是将我知道的一些RabbitMQ的知识简单罗列下&#xff0c;自从我来公司到现在&#xff0c;虽然一直都在用RabbitMQ&#xff0c;也一直想着把这块总结下&#xff0c;却一直在给自己找借口&#xff0c;最近一段时间&#…

MQ - RabbitMQ - 架构及工作原理

参考网址&#xff1a; RabbitMQ的应用场景以及基本原理介绍 RabbitMQ使用详解 RabbitMQ的Java应用(1) -- Rabbit Java Client使用 1. 系统架构 几个概念说明: Broker:它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线&#xff0c;保证数据能按照指定的方式进…

RabbitMQ 详解

RabbitMQ 详解 MQ 的相关概念RabbitMQ 四大核心概念RabbitMQ 的工作原理RabbitMQ 六大核心部分&#xff08;模式&#xff09;简单模式工作模式工作模式案例消息确认&#xff08;消息应答&#xff09;消息持久化 发布确认模式交换机&#xff08;Exchange&#xff09;Exchange 概…

RabbitMq原理及应用

一、简介 MQ(Message Queue),即消息队列&#xff0c;是一种实现应用级别之间的通信手段。不同应用之间可以通过读写消息&#xff0c;以消息为媒介传递应用数据&#xff0c;不需要应用之间建立强连接。此方式与远程调用&#xff08;RPC&#xff09;是应用通信的常见方式。在这个…

RabbitMQ原理解析

场景模拟 在介绍RabbitMQ之前&#xff0c;我们先来看下面一个电商项目的场景&#xff1a; 商品的原始数据保存在数据库中&#xff0c;增删改查都在数据库中完成。搜索服务数据来源是索引库&#xff08;Elasticsearch&#xff09;&#xff0c;如果数据库商品发生变化&#xff0…

Rabbitmq基本原理和架构

全栈工程师开发手册 &#xff08;作者&#xff1a;栾鹏&#xff09; 架构系列文章 rabbitmq官网:https://www.rabbitmq.com/rabbitmqctl.8.html MQ全称为Message Queue, 是一种分布式应用程序的的通信方法&#xff0c;它是消费-生产者模型的一个典型的代表&#xff0c;produc…

RabbitMQ — RabbitMQ使用以及原理解析

RabbitMQ使用以及原理解析 RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现;在RabbitMQ官网上主要有这样的模块信息, Work queues消息队列,Publish/Subscribe发布订阅服务,Routing, Topics, RPC等主要应用的模块功能. 几个概念说明: Broker:它提供一种传…

RabbitMQ介绍及工作原理

RabbitMQ介绍及工作原理 一&#xff0c;什么是RabbitMQ ​ RabbitMQ是一种称为消息代理或队列管理器的消息队列软件。它是一个可以定义队列的软件&#xff0c;应用程序可以连接到队列并将消息传输到它们。消息队列的基本体系结构很简单&#xff1a;存在称为生产者的客户端应用…