当前位置: 首页 > news >正文

.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(); } } }
复制代码

读出的结果

 三、简单学习

复制代码
/// <summary>
        ///  组装workbook.
        /// </summary> /// <param name="dt">dataTable资源</param> /// <param name="columnHeader">表头</param> /// <returns></returns> public static HSSFWorkbook BuildWorkbook1(DataTable dt, string columnHeader = "") { var workbook = new HSSFWorkbook(); ISheet sheet = workbook.CreateSheet(string.IsNullOrWhiteSpace(dt.TableName) ? "Sheet1" : dt.TableName); #region 文件属性信息 { var dsi = PropertySetFactory.CreateDocumentSummaryInformation(); dsi.Company = "NPOI"; workbook.DocumentSummaryInformation = dsi; SummaryInformation si = PropertySetFactory.CreateSummaryInformation(); si.Author = "文件作者信息"; si.ApplicationName = "创建程序信息"; si.LastAuthor = "最后保存者信息"; si.Comments = "作者信息"; si.Title = "标题信息"; si.Subject = "主题信息"; si.CreateDateTime = DateTime.Now; workbook.SummaryInformation = si; } #endregion var dateStyle = workbook.CreateCellStyle(); var format = workbook.CreateDataFormat(); dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd"); //取得列宽 var arrColWidth = new int[dt.Columns.Count]; foreach (DataColumn item in dt.Columns) { arrColWidth[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length; } for (var i = 0; i < dt.Rows.Count; i++) { for (var j = 0; j < dt.Columns.Count; j++) { int intTemp = Encoding.GetEncoding(936).GetBytes(dt.Rows[i][j].ToString()).Length; if (intTemp > arrColWidth[j]) { arrColWidth[j] = intTemp; } } } int rowIndex = 0; foreach (DataRow row in dt.Rows) { #region 表头 列头 if (rowIndex == 65535 || rowIndex == 0) { if (rowIndex != 0) { sheet = workbook.CreateSheet(); } #region 表头及样式 { var headerRow = sheet.CreateRow(0); headerRow.HeightInPoints = 25; headerRow.CreateCell(0).SetCellValue(columnHeader); //CellStyle ICellStyle headStyle = workbook.CreateCellStyle(); headStyle.Alignment = HorizontalAlignment.Center;// 左右居中 headStyle.VerticalAlignment = VerticalAlignment.Center;// 上下居中 // 设置单元格的背景颜色(单元格的样式会覆盖列或行的样式) headStyle.FillForegroundColor = (short)11; //定义font IFont font = workbook.CreateFont(); font.FontHeightInPoints = 20; font.Boldweight = 700; headStyle.SetFont(font); headerRow.GetCell(0).CellStyle = headStyle; sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, dt.Columns.Count - 1)); } #endregion #region 列头及样式 { var headerRow = sheet.CreateRow(1); //CellStyle ICellStyle headStyle = workbook.CreateCellStyle(); headStyle.Alignment = HorizontalAlignment.Center;// 左右居中 headStyle.VerticalAlignment = VerticalAlignment.Center;// 上下居中 //定义font IFont font = workbook.CreateFont(); font.FontHeightInPoints = 10; font.Boldweight = 700; headStyle.SetFont(font); foreach (DataColumn column in dt.Columns) { headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName); headerRow.GetCell(column.Ordinal).CellStyle = headStyle; sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256); } } #endregion if (columnHeader != "") { //header row IRow row0 = sheet.CreateRow(0); for (int i = 0; i < dt.Columns.Count; i++) { ICell cell = row0.CreateCell(i, CellType.String); cell.SetCellValue(dt.Columns[i].ColumnName); } } rowIndex = 2; } #endregion #region 内容 var dataRow = sheet.CreateRow(rowIndex); foreach (DataColumn column in dt.Columns) { var newCell = dataRow.CreateCell(column.Ordinal); string drValue = row[column].ToString(); switch (column.DataType.ToString()) { case "System.String"://字符串类型  newCell.SetCellValue(drValue); break; case "System.DateTime"://日期类型  DateTime dateV; DateTime.TryParse(drValue, out dateV); newCell.SetCellValue(dateV); newCell.CellStyle = dateStyle;//格式化显示 break; case "System.Boolean"://布尔型 bool boolV = false; bool.TryParse(drValue, out boolV); newCell.SetCellValue(boolV); break; case "

转载于:https://www.cnblogs.com/nxxshxf/p/6409693.html

相关文章:

  • java--------抽象类与接口的区别
  • React开发和模块管理的主流工具——Webpack
  • ELASTIC索引监控脚本
  • Unit02: Servlet工作原理
  • 【WPF】GridControl的使用
  • node操作mongodb
  • ubuntu 17.04 Tomcat安装
  • Android5.0(Lollipop) BLE蓝牙4.0+浅析code(二)
  • gulp自动化构建工具--压缩css、js、img、编译less、自动刷新一体--学习笔记
  • RPG难题
  • 很不错标签云js插件
  • Atitit 遍历文件夹算法 autoit attilax总结
  • Hive常用命令
  • ArcGIS Runtime SDK for WPF之测量距离和面积
  • hash随笔
  • 【RocksDB】TransactionDB源码分析
  • Angular Elements 及其运作原理
  • echarts花样作死的坑
  • express如何解决request entity too large问题
  • Java IO学习笔记一
  • mac修复ab及siege安装
  • mysql 数据库四种事务隔离级别
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Redux系列x:源码分析
  • Solarized Scheme
  • supervisor 永不挂掉的进程 安装以及使用
  • Vue.js 移动端适配之 vw 解决方案
  • vue-router的history模式发布配置
  • 回顾2016
  • 使用common-codec进行md5加密
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 携程小程序初体验
  • 数据可视化之下发图实践
  • # Panda3d 碰撞检测系统介绍
  • (04)odoo视图操作
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (三十五)大数据实战——Superset可视化平台搭建
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • .cfg\.dat\.mak(持续补充)
  • .form文件_SSM框架文件上传篇
  • .gitignore文件---让git自动忽略指定文件
  • .NET gRPC 和RESTful简单对比
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .Net中间语言BeforeFieldInit
  • @RequestBody的使用
  • [20161101]rman备份与数据文件变化7.txt
  • [Android] 修改设备访问权限
  • [Android学习笔记]ScrollView的使用
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)