NPOI操作excel
时间:2019-09-29
本文章向大家介绍NPOI操作excel,主要包括NPOI操作excel使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
调用
using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NpoiTest { class Program { static void Main(string[] args) { string path = "D:\\"; string xlsPath = Path.Combine(path, DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");;//excel的保存路径 NpoiExcelUtility utility = new NpoiExcelUtility(xlsPath); #region MyRegion DataTable dt = new DataTable("NewDt"); //创建自增长的ID列 DataColumn dc = dt.Columns.Add("ID", Type.GetType("System.Int32")); dc.AutoIncrement = true; //自动增加 dc.AutoIncrementSeed = 1; //起始为1 dc.AutoIncrementStep = 1; //步长为1 dc.AllowDBNull = false; //非空 //创建其它列表 dt.Columns.Add(new DataColumn("Name", Type.GetType("System.String"))); dt.Columns.Add(new DataColumn("Age", Type.GetType("System.Int32"))); dt.Columns.Add(new DataColumn("Score", Type.GetType("System.Decimal"))); dt.Columns.Add(new DataColumn("CreateTime", Type.GetType("System.DateTime"))); //创建数据 DataRow dr = dt.NewRow(); dr["Name"] = "张三"; dr["Age"] = 28; dr["Score"] = 85.5; dr["CreateTime"] = DateTime.Now; dt.Rows.Add(dr); dr = dt.NewRow(); dr["Name"] = "李四"; dr["Age"] = 24; dr["Score"] = 72; dr["CreateTime"] = DateTime.Now; dt.Rows.Add(dr); dr = dt.NewRow(); dr["Name"] = "王五"; dr["Age"] = 36; dr["Score"] = 63.5; dr["CreateTime"] = DateTime.Now; dt.Rows.Add(dr); #endregion if (dt != null) { utility.CreatExcelSheet("基本信息表", dt); utility.SaveExcel(); Process.Start(xlsPath);//导入完毕后直接自动启动exce打开生成的excel文件 } } } }
excel帮助类
using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NpoiTest { /// <summary> /// 写Excel的实用类,NPOI 是POI项目的.NET 版本,是一个开源的用来读写Excel、WORD等微软OLE2组件文档的项目,不依赖于office,如果用Microsoft.Office.Interop.Excel,容易出错,尤其是安装了不同版本的office软件 /// </summary> public class NpoiExcelUtility { private string _xlsPath = string.Empty; private HSSFWorkbook _workBook = null; /// <summary> /// 构造函数 /// </summary> /// <param name="xlsPath">xls保存路径</param> public NpoiExcelUtility(string xlsPath) { _xlsPath = this.CheckFilePath(xlsPath); _workBook = new HSSFWorkbook(); } /// <summary> /// 将DataTable保存到sheet里 /// </summary> /// <param name="dt"></param> /// <param name="sheet"></param> private void DataTableToExcel(DataTable dt, ISheet sheet) { ICellStyle style = _workBook.CreateCellStyle(); style.Alignment = HorizontalAlignment.Left; style.VerticalAlignment = VerticalAlignment.Center; ICellStyle colStyle = _workBook.CreateCellStyle(); colStyle.Alignment = HorizontalAlignment.Left; colStyle.VerticalAlignment = VerticalAlignment.Center; IFont font = _workBook.CreateFont(); font.Color = NPOI.HSSF.Util.HSSFColor.LightBlue.COLOR_NORMAL; colStyle.SetFont(font); //列名 IRow row = sheet.CreateRow(0); for (int i = 0; i < dt.Columns.Count; i++) { sheet.SetDefaultColumnStyle(i, style); ICell cell = row.CreateCell(i); cell.SetCellValue(dt.Columns[i].ToString()); cell.CellStyle = colStyle; } //内容 for (int i = 1; i <= dt.Rows.Count; i++) { row = sheet.CreateRow(i); for (int j = 0; j < dt.Columns.Count; j++) { object obj = dt.Rows[i - 1][j]; if (obj != null) { ICell cell = row.CreateCell(j); if (obj is double || obj is float || obj is int || obj is long || obj is decimal) { cell.SetCellValue(Convert.ToDouble(obj)); } else if (obj is bool) { cell.SetCellValue((bool)obj); } else { cell.SetCellValue(obj.ToString()); } } } } //一下方法会报异常,可能是改NPOI版本的问题,之前老的版本不会报错,这里暂时注释掉 //for (int i = 0; i < dt.Columns.Count; i++) //{ // sheet.AutoSizeColumn(i); //} } /// <summary> /// 保存Excel /// </summary> public void SaveExcel() { FileStream file = new FileStream(_xlsPath, FileMode.Create); _workBook.Write(file); file.Close(); } /// <summary> /// 创建Sheet /// </summary> /// <param name="sheetName">sheet名称</param> /// <param name="tbl">DataTable数据表,当行数大于65536时,自动分割成几个sheet,sheet名称为sheetName_i</param> public void CreatExcelSheet(string sheetName, DataTable tbl) { string sName = this.CheckSheetName(sheetName); int rowMax = 65535; int intNum = tbl.Rows.Count / rowMax; int remainder = tbl.Rows.Count % rowMax; for (int i = 0; i < intNum; i++) { DataTable subTbl = tbl.Clone(); for (int j = 0; j < 65535; j++) { int rowIndex = i * rowMax + j; subTbl.Rows.Add(tbl.Rows[rowIndex].ItemArray); } string subSheet = sName + "_" + (i + 1); ISheet sheet = _workBook.CreateSheet(subSheet); this.DataTableToExcel(subTbl, sheet); } if (remainder > 0) { DataTable subTbl = tbl.Clone(); for (int j = 0; j < remainder; j++) { int rowIndex = intNum * rowMax + j; subTbl.Rows.Add(tbl.Rows[rowIndex].ItemArray); } string subSheet = sName + "_" + (intNum + 1); if (intNum < 1) { subSheet = sName; } ISheet sheet = _workBook.CreateSheet(subSheet); this.DataTableToExcel(subTbl, sheet); } } /// <summary> /// 检查sheet名称是否合法,并去掉不合法字符 /// </summary> /// <param name="sheetName"></param> private string CheckSheetName(string sheetName) { string rlt = sheetName; string[] illegalChars = { "*", "?", "\"", @"\", "/" }; for (int i = 0; i < illegalChars.Length; i++) { rlt = rlt.Replace(illegalChars[i], ""); } return rlt; } /// <summary> /// 检查xls路径是否合法,并去掉不合法字符 /// </summary> /// <param name="filePath"></param> private string CheckFilePath(string filePath) { string dir = Path.GetDirectoryName(filePath); string fileName = Path.GetFileNameWithoutExtension(filePath); string ext = Path.GetExtension(filePath); string[] illegalChars = { ":", "*", "?", "\"", "<", ">", "|", @"\", "/" }; for (int i = 0; i < illegalChars.Length; i++) { fileName = fileName.Replace(illegalChars[i], ""); } string rlt = Path.Combine(dir, fileName + ext); return rlt; } } }
原文地址:https://www.cnblogs.com/macT/p/11606690.html
- springboot mybatis 事务管理
- Elasticsearch JAVA api轻松搞定groupBy聚合
- 微信加关注链接 一键关注公众号 解决用手机看网页无法扫二维码的烦恼
- springboot mybatis redis 二级缓存
- Elasticsearch强制重置未分配的分片(unassigned)
- 帝国cms调用缩略图和具体文章的方法
- python codis集群客户端(一) - 基于客户端daemon探活与服务列表维护
- python codis集群客户端(二) - 基于zookeeper对实例创建与摘除
- JavaScript replace() 方法
- 别让Open Sans字体拖慢wordpress后台速度
- Oracle 问题小结
- 为帝国cms模板添加站内搜索小教程
- 线程传参
- JQuery 小结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Ubuntu18.04安装Python虚拟环境
- linux下查看so或可执行程序的依赖库
- Linux中crontab输出重定向不生效问题的解决方法
- Ubuntu中安装MySQL更改默认密码的步骤详解
- linux下用csplit命令分割文件的方法示例
- Linux基础命令之mktemp详解
- CentOS7设置jar应用程序开机启动的方法
- linux jexus服务设置开机启动
- linux如何利用crontab添加定时任务详解
- windows安装openssh并通过生成SSH密钥登录Linux服务器
- SSH设置别名访问远程服务器详细介绍
- Linux检查Swap交换空间的五个命令小结
- seaborn数据总体分布的可视化策略
- 配置 Apache 服务器禁止所有非法域名 访问自己的服务器
- Ubuntu16.04源码安装Mininet