.NET NPOI导出Excel详解

http://www.cnblogs.com/yinrq/p/5590970.html

 

 

.NET NPOI导出Excel详解

NPOI,顾名思义,就是POI的.NET版本。那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件。

支持的文件格式包括xls, doc, ppt等。

官方网站:http://npoi.codeplex.com/

nuget直接获取使用

一、NPOI生成Excel

复制代码
            //创建工作薄var workbook = new HSSFWorkbook();//创建表var table = workbook.CreateSheet("joye.net");//模拟20行20列数据for (var i = 0; i < 20; i++){var row = table.CreateRow(i);for (int j = 0; j < 20; j++){var cell = row.CreateCell(j);cell.SetCellValue(j);}}//打开xls文件,如没有则创建,如存在则在创建是不要打开该文件using (var fs = File.OpenWrite(@"c:/joye.net.xls")){workbook.Write(fs);   //向打开的这个xls文件中写入mySheet表并保存。Console.WriteLine("生成成功");}
复制代码

二、NPOI读取Excel

复制代码
using (var fs = File.OpenRead(@"c:/joye.net.xls")) {//把xls文件中的数据写入workbook1中var workbook1 = new HSSFWorkbook(fs);for (var i = 0; i < workbook1.NumberOfSheets; i++){var sheet = workbook1.GetSheetAt(i);for (var j = 0; j <= sheet.LastRowNum; j++){   //读取当前行数据var row = sheet.GetRow(j);if (row != null){for (var k = 0; k <= row.LastCellNum; k++){   //当前表格var cell = row.GetCell(k);if (cell != null){Console.Write(cell.ToString() + "  ");}}}Console.WriteLine();}}}
复制代码

读出的结果

 三、简单学习

 学习代码
 代码调用

四、NPOI导出Excel 65536问题

复制代码
        public static HSSFWorkbook BuildWorkbook(DataTable dt){var book = new HSSFWorkbook();  ISheet sheet = book.CreateSheet("Sheet1");//Data Rowsfor (int i = 0; i < dt.Rows.Count; i++){IRow drow = sheet.CreateRow(i);for (int j = 0; j < dt.Columns.Count; j++){ICell cell = drow.CreateCell(j, CellType.String);cell.SetCellValue(dt.Rows[i][j].ToString());}}//自动列宽for (int i = 0; i <= dt.Columns.Count; i++)sheet.AutoSizeColumn(i, true);return book;}
复制代码

NPOI导出Excel超过65536会报异常,原来是由于NPOI这个动态库导致的,然后看了下版本,发现是1.2.5。然后百度了下,发现这个版本的NPOI只支持office2003,二office2003最多支持65536行

解决方式:

1、只是在插入数据的时候,加个判断,如果数据条数大于65536时,就在创建一个sheet

复制代码
        //65536判断处理public static HSSFWorkbook BuildWorkbook(DataTable dt){var book = new HSSFWorkbook();ISheet sheet1 = book.CreateSheet("Sheet1");ISheet sheet2 = book.CreateSheet("Sheet2");//填充数据for (int i = 0; i < dt.Rows.Count; i++){if (i < 65536){IRow drow = sheet1.CreateRow(i);for (int j = 0; j < dt.Columns.Count; j++){ICell cell = drow.CreateCell(j, CellType.String);cell.SetCellValue(dt.Rows[i][j].ToString());}}if (i >= 65536){IRow drow = sheet2.CreateRow(i - 65536);for (int j = 0; j < dt.Columns.Count; j++){ICell cell = drow.CreateCell(j, CellType.String);cell.SetCellValue(dt.Rows[i][j].ToString());}}}//自动列宽for (int i = 0; i <= dt.Columns.Count; i++){sheet1.AutoSizeColumn(i, true);sheet2.AutoSizeColumn(i, true);}return book;}
复制代码

2、考虑使用高版本Office,使用用对象支持高版本的NPOI

复制代码
        //高版本public static XSSFWorkbook BuildWorkbook(DataTable dt){var book = new XSSFWorkbook();ISheet sheet = book.CreateSheet("Sheet1");//Data Rowsfor (int i = 0; i < dt.Rows.Count; i++){IRow drow = sheet.CreateRow(i);for (int j = 0; j < dt.Columns.Count; j++){ICell cell = drow.CreateCell(j, CellType.String);cell.SetCellValue(dt.Rows[i][j].ToString());}}//自动列宽for (int i = 0; i <= dt.Columns.Count; i++)sheet.AutoSizeColumn(i, true);return book;}
复制代码

五、web开发中导出Excel

复制代码
        public static void ExportExcel(DataTable dt, string fileName = ""){//生成ExcelIWorkbook book = BuildWorkbook(dt);//web 下载if (fileName == "")fileName = string.Format("{0:yyyyMMddHHmmssffff}", DateTime.Now);fileName = fileName.Trim();string ext = Path.GetExtension(fileName);if (ext.ToLower() == ".xls" || ext.ToLower() == ".xlsx")fileName = fileName.Replace(ext, string.Empty);HttpResponse httpResponse = HttpContext.Current.Response;httpResponse.Clear();httpResponse.Buffer = true;httpResponse.Charset = Encoding.UTF8.BodyName;httpResponse.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");httpResponse.ContentEncoding = Encoding.UTF8;httpResponse.ContentType = "application/vnd.ms-excel; charset=UTF-8";book.Write(httpResponse.OutputStream);httpResponse.End();}
复制代码

 

基于.xls模板生成Excel文件有时间再看

代码下载:https://yunpan.cn/cRBVnTCSchz7k (提取码:779e) 

+ 关注

转载于:https://www.cnblogs.com/lacey/p/6634004.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++隐式类型转换存在的陷阱

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 目录* 目标代码 构造函数定义的隐式类型转换分析a1分析a2分析a3 1|0目标代码 旨在弄懂下面的代码&#xff0c;明确变量a1…

Android中将一个图片切割成多个图片[转]

有种场景&#xff0c;我们想将一个图片切割成多个图片。比如我们在开发一个拼图的游戏&#xff0c;就首先要对图片进行切割。 以下是封装好的两个类&#xff0c;可以实现图片的切割。仅供参考和学习。 一个是ImagePiece类&#xff0c;此类保存了一个Bitmap对象和一个标识图片的…

并行开发 —— 第六篇 异步编程模型

在.net里面异步编程模型由来已久&#xff0c;相信大家也知道Begin/End异步模式和事件异步模式&#xff0c;在task出现以后&#xff0c;这些东西都可以被task包装 起来&#xff0c;可能有人会问&#xff0c;这样做有什么好处&#xff0c;下面一一道来。 一&#xff1a; Begin/En…

C++相关

初始化列表中的初始化顺序1 class Printer{2 public:3 Printer(string name){cout<<name;}4 };5 class Container{6 public:7 Container():b("b"),a("a"){}8 Printer a;9 Printer b; 10 }; 11 12 int main…

Java中的Unsafe在安全领域的一些应用总结和复现

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 目录* 0 前言 1 基本使用 1.1 内存级别修改值1.2 创建对象1.3 创建VM Anonymous Class 2 利用姿势 2.1 修改值以关闭RASP等…

Spring Boot中使用Swagger2构建强大的RESTful API文档

由于Spring Boot能够快速开发、便捷部署等特性&#xff0c;相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因&#xff0c;这些终端会共用很多底层业务逻辑&#xff0c;因此我们会抽象出这样一层来同时服务于多个…

关于公司没有公网IP也没有动态IP,如何远程办公呢?

2019独角兽企业重金招聘Python工程师标准>>> 迫于公司网络环境特殊&#xff0c;没有公网IP地址&#xff0c;也没有动态IP地址&#xff0c;其实就是园区分了一根内网固定IP的网线过来&#xff0c;这两天正巧有同事要外出办公&#xff0c;问题来了&#xff0c;开发环境…

ST_LINK/V2 SWIM和SWD、JTAG下载口说明

LED状态说明 闪烁红色&#xff1a;ST-LINK/V2连接到计算机后&#xff0c;第一次USB枚举过程红色&#xff1a;ST-LINK/V2与计算机已建立连接闪烁绿色/红色&#xff1a;目标板和计算机在进行数据交换绿色&#xff1a;通讯完成橙色&#xff08;红色绿色&#xff09;&#xff1a;通…

Gerrit的用法及与gitlab的区别

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 来到一个新的团队&#xff0c;开发的代码被同事覆盖了。找同事核实&#xff0c;同事却说根本没有看到我的代码。经过一番沟通…

The 15th UESTC Programming Contest Preliminary H - Hesty Str1ng cdoj1551

地址&#xff1a;http://acm.uestc.edu.cn/#/problem/show/1551 题目&#xff1a; Hesty Str1ng Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) A chrysanthemum was painted on the second page, and we tried to use the magic pow…

easyui 点滴记录

为什么80%的码农都做不了架构师&#xff1f;>>> 【1.安装】&#xff1a;pip install easygui 【2.常用】 integerbox 交互式输入数字textbox 交互式输入文本ccbox 确认判断boolbox 是否判断multchoicebox 多选条目choicebox 单选条目buttonbox 单选按钮【3.体验一…

IAR切BANK--BANK说明

一、为什么要用到BANK&#xff1f; C51单片机的最大寻址范围为2^1664K&#xff0c;为了突破64K代码的限制&#xff0c;就需要采用C51的切BANK。 二、切BANK的原理 代码地址空间的上半部 ,以重叠BANK0的物理地址空间 , 硬件设计了 n个存储 器页面来存储程序代码 。在任一时刻 …

hdu 4293 Groups DP

http://acm.hdu.edu.cn/showproblem.php?pid4293 题意&#xff1a; 有n个人分成了若干组走在一条林荫道路上&#xff0c;导游为了能够确定人数&#xff0c;要求每个人喊出自己所在的队伍前边有多少人Ai表示,后边有多少人Bi表示&#xff0c;于是我们得到了n条信息。这里面有错误…

IAR切BANK--命令连接器文件xcl格式说明

IAREWARM中段后缀含义 后缀 段类型 含义 AC CONST 绝对地址定位常数 AN DATA 用关键字__no_init声明的绝对地址定位数据 C CONST 常数 I DATA 初始化值为非0的数据 ID CONST 上述数据的初始式 N DATA 未初始化的数据 Z DATA 初始化值为0的数据 ROM用于…

DBA_Oracle Table Partition表分区概念汇总(概念)

2014-06-20 Created By BaoXinjian 一、摘要 有关表分区的一些维护性操作&#xff1a; 注&#xff1a;分区根据具体情况选择。 表分区有以下优点&#xff1a; 1、数据查询&#xff1a;数据被存储到多个文件上&#xff0c;减少了I/O负载&#xff0c;查询速度提高。 2、数据修剪&…

electron打包vue项目

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 创建项目 点击这里 添加electron-builder 1、在项目目录下运行命令&#xff1a;vue add electron-builder 2、electron-…

Hdu 4293 DP

题意&#xff1a; n个人说自己前面有多少人 后面有多少人 求出说真话人数最多的情况 每个样例有 一个 n 表示n个人 接下来 n 行有a b 表示他前面的人数和后面的人数 思路&#xff1a; 如果已经知道了其中一组的人数~ 就往前找..找在这一组之前与这一组的话不矛盾的最多人数 Ti…

IAR切BANK--程序中的使用

一、在IAR的集成开发环境中实现数据变量定位方法如下三种 1、__no_init char alpha 0x0200; 2、#pragma location 0x0202 const int beta; 3、const int gamma 0x0204 3; 或&#xff1a; 1&#xff09;__no_init int alpha "MYSEGMENT"; //MYSEGMENT段可在…

CSS/CSS3语法新特性笔记

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 CSS层叠样式表 三大特性 层叠性&#xff1a;相同的样式会覆盖 继承性&#xff1a;属性可向下继承 优先级&#xff1a;范…

C# winform 自定义皮肤制作

最近要做个软件正在做技术准备&#xff0c;由于WINFORM生成的窗体很丑陋&#xff0c;一个好的软件除了功能性很重要外&#xff0c;UI的体验也是不容忽视的。习惯性的在网上搜素了下&#xff0c;换肤控件也有好几款&#xff0c;但是有些用起来不是很好用&#xff0c;好点的也要花…