NPOI 操作笔记
- public static class ExcelUtil
- {
- // Methods
- public static DataTable GetDataTable(Stream stream)
- {
- HSSFWorkbook workbook;
- try
- {
- workbook = new HSSFWorkbook(stream);
- }
- catch (Exception exception)
- {
- throw exception;
- }
- ISheet sheetAt = workbook.GetSheetAt();
- IEnumerator rowEnumerator = sheetAt.GetRowEnumerator();
- DataTable table = new DataTable();
- IRow row = sheetAt.GetRow();
- if (row != null)
- {
- for (int j = ; j < row.LastCellNum; j++)
- {
- ICell cell = row.GetCell(j);
- if (cell == null)
- {
- table.Columns.Add("cell" + j.ToString());
- }
- else
- {
- table.Columns.Add(cell.ToString());
- }
- }
- }
- int count = table.Columns.Count;
- for (int i = ; rowEnumerator.MoveNext(); i++)
- {
- if (i > )
- {
- IRow current = (HSSFRow) rowEnumerator.Current;
- DataRow row3 = table.NewRow();
- for (int k = ; k < count; k++)
- {
- ICell cell2 = current.GetCell(k);
- if (cell2 == null)
- {
- row3[k] = null;
- }
- else
- {
- row3[k] = cell2.ToString();
- }
- }
- table.Rows.Add(row3);
- }
- }
- return table;
- }
- public static DataTable GetDataTable(string filePath)
- {
- HSSFWorkbook workbook;
- try
- {
- using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
- {
- workbook = new HSSFWorkbook(stream);
- }
- }
- catch (Exception exception)
- {
- throw exception;
- }
- ISheet sheetAt = workbook.GetSheetAt();
- IEnumerator rowEnumerator = sheetAt.GetRowEnumerator();
- DataTable table = new DataTable();
- IRow row = sheetAt.GetRow();
- if (row != null)
- {
- for (int j = ; j < row.LastCellNum; j++)
- {
- ICell cell = row.GetCell(j);
- if (cell == null)
- {
- table.Columns.Add("cell" + j.ToString());
- }
- else
- {
- table.Columns.Add(cell.ToString());
- }
- }
- }
- int count = table.Columns.Count;
- for (int i = ; rowEnumerator.MoveNext(); i++)
- {
- if (i > )
- {
- IRow current = (HSSFRow) rowEnumerator.Current;
- DataRow row3 = table.NewRow();
- for (int k = ; k < count; k++)
- {
- ICell cell2 = current.GetCell(k);
- if (cell2 == null)
- {
- row3[k] = null;
- }
- else
- {
- row3[k] = cell2.ToString();
- }
- }
- table.Rows.Add(row3);
- }
- }
- return table;
- }
- /// <summary>
- /// 导入数据到excel文件
- /// </summary>
- /// <param name="data">待导入的数据</param>
- /// <param name="fileName">文件路径</param>
- /// <param name="sheetName">excel表名</param>
- /// <param name="hiddenColmnIndexs">隐藏列索引</param>
- /// <param name="header">列头字典;原始列头=>重命名列名</param>
- /// <param name="redHeaderClomnIndexs">标记红色加粗的列索引</param>
- /// <param name="comments">列头批注字典;列名=>批注内容</param>
- /// <returns></returns>
- public static string SetDataTableToExcel(DataTable data,string fileName, string sheetName, int[] hiddenColmnIndexs = null, Dictionary<string, string> header = null,int[] redHeaderClomnIndexs = null,Dictionary<string,string> comments= null)
- {
- int num4 = ;
- int num = ;
- int column = ;
- int rownum = ;
- ISheet sheet = null;
- IWorkbook workbook = new HSSFWorkbook();
- //todo:tans
- var stream = new FileStream(fileName ,FileMode.OpenOrCreate,FileAccess.ReadWrite);
- try
- {
- sheet = workbook.CreateSheet(sheetName);
- IRow row = sheet.CreateRow();
- column = ;
- int maxCount = Math.Max(header!=null ? header.Count : , data.Columns.Count);
- IDrawing patr1 = sheet.CreateDrawingPatriarch();// as HSSFPatriarch;
- //创建列头
- while (column < data.Columns.Count)
- {
- var col = data.Columns[column];
- var colName = col.ColumnName;
- ICell cell = row.GetCell(column);
- if (header!=null && header.ContainsKey(colName))
- {
- string temp = header[colName];//列重命名
- header.Remove(colName);
- cell = row.CreateCell(column);
- cell.SetCellValue(temp);
- }
- //创建批注
- colName = cell.StringCellValue;
- if (comments!=null && comments.ContainsKey(colName))
- {
- var commentStr = comments[colName];
- IComment comment1 = patr1.CreateCellComment(new HSSFClientAnchor(, , , , , , , ));// as HSSFComment;
- comment1.String = new HSSFRichTextString(commentStr);
- cell.CellComment = comment1;
- }
- column++;
- }
- //附加列头
- int colCount = data.Columns.Count;
- foreach (var colName in header.Keys)
- {
- row.CreateCell(colCount).SetCellValue(header[colName]);
- colCount++;
- }
- //设置列头样式
- redHeaderClomnIndexs = redHeaderClomnIndexs ?? new int[]{};
- for (int i = , l=, rl= redHeaderClomnIndexs.Length; i < row.Cells.Count; i++,l++)
- {
- var cell = row.GetCell(i);
- if (cell==null)
- {
- continue;
- }
- //设置字体
- IFont font = workbook.CreateFont();
- font.Boldweight = (short)FontBoldWeight.BOLD;
- if (l < rl)
- {
- int index = redHeaderClomnIndexs[l];
- cell = row.GetCell(index);
- font.Color = (short)FontColor.RED;
- }
- //设置样式
- ICellStyle style = workbook.CreateCellStyle();
- style.Alignment = HorizontalAlignment.CENTER;
- style.SetFont(font);
- cell.CellStyle = style;
- }
- //创建数据列,并填充数据
- rownum = ;
- for (num = ; num < data.Rows.Count; num++)
- {
- IRow row2 = sheet.CreateRow(rownum);
- for (column = ; column < data.Columns.Count; column++)
- {
- row2.CreateCell(column).SetCellValue(data.Rows[num][column].ToString());
- }
- rownum++;
- }
- //设置隐藏列
- if (hiddenColmnIndexs != null && hiddenColmnIndexs.Length <= column)
- {
- for (int i = , l = hiddenColmnIndexs.Length; i < l; i++)
- {
- sheet.SetColumnHidden(hiddenColmnIndexs[i], true);
- }
- }
- //当创建完毕所有cell,设置居中才有效
- for (int i = ; i < row.Cells.Count; i++)
- {
- sheet.AutoSizeColumn(i);
- }
- workbook.Write(stream);
- }
- catch (Exception ex)
- {
- return null;
- }
- finally
- {
- stream.Close();
- }
- return fileName;
- }
- }
NPOI 操作笔记的更多相关文章
- NPOI操作EXCEL(四)——反射机制批量导出excel文件
前面我们已经实现了反射机制进行excel表格数据的解析,既然有上传就得有下载,我们再来写一个通用的导出方法,利用反射机制实现对系统所有数据列表的筛选结果导出excel功能. 我们来构想一下这样一个画面 ...
- NPOI操作Excel辅助类
/// <summary> /// NPOI操作excel辅助类 /// </summary> public static class NPOIHelper { #region ...
- 数据字典生成工具之旅(4):NPOI操作EXECL
这篇会介绍NPOI读写EXECL,读写EXECL的组件很多,可以使用微软自己的COM组件EXECL.exe读写,不过这种方式限制很大. 1:客户环境必须装Office(虽然现在机子上不装Office的 ...
- NPOI操作excel之写入数据到excel表
在上一篇<NPOI操作excel之读取excel数据>我们把excel数据写入了datatable中,本篇就讲如何把datatable数据写入excel中. using System; u ...
- C#开发中使用Npoi操作excel实例代码
C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...
- 用NPOI操作EXCEL关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数
2.4.1 用NPOI操作EXCEL关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数 NPOI教程:http://www.cnb ...
- 使用 WeihanLi.Npoi 操作 CSV
使用 WeihanLi.Npoi 操作 CSV Intro 最近发现 csv 文件在很多情况下都在使用,而且经过大致了解,csv 格式简单,相比 excel 文件要小很多,读取也很是方便,而且也很通用 ...
- Centos7系统下修改主机名操作笔记
习惯了在Centos6系统下修改主机名的操作,但是Centos7下修改主机名的操作却大不相同!操作笔记如下: 在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient) ...
- C# 如何使用NPOI操作Excel以及读取合并单元格等
C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...
随机推荐
- python轻量级orm
python下的orm使用SQLAlchemy比较多,用了一段时间感觉不顺手,主要问题是SQLAlchemy太重,所以自己写了一个orm,实现方式和netsharp类似,oql部分因为代码比较多,没有 ...
- idea+tomcat 端口占用
ntelliJ IDEA和Tomcat整合注意事项(转) 这两天一直在学习IDEA这个开发工具,今天再整合tomcat的时候遇到了问题,运行时总是报错,说是8080端口被占用,把我就搞的郁闷了,我就尝 ...
- Python10/17-re模块/hashlib模块/logging模块
import logging # 1.日志的级别# logging.debug("这是一个调试信息") # 10# logging.info("常规信息") # ...
- fiddler抓包时显示Tunnel to......443是怎么回事
之前公司的app使用的http协议,因此不需要安装证书也能够转包. 后来改成https协议后,在使用fiddler进行抓包时,一直出现tunnel to 443. 百度了好久也没有具体的解决办法,后来 ...
- TP5在lnmp环境中不能重写的问题
说到坑,这个问题困扰了我一两天时间,本地可以,线上环境检查了好久. 基本检查的地方有几个了,首先就是nginx下面的重写配置,这个大家在网上都能搜到,至于定义的变量和配置路径,修改一下即可. 还有就是 ...
- IntelliJ IDEA 2017版 spring-boot2.0.2 搭建 JPA springboot DataSource JPA环境搭建,JPA实现非字符型设置长度
1.在github上已有配置环境,如下链接,(需要环境JDK1.8及以上版本,Tomcat1.8及以上版本,搭建maven库,使用编译器IntellJ IDEA) https://github.com ...
- 学以致用十八-----shell脚本之基础概念及变量
1.脚本脚本,说了很多年的脚本,一直都没怎么弄明白为什么叫脚本,还仅仅是script翻译过来的?今天再查看翻译,查阅了资料,对脚本有了个新的认识. script也叫剧本,脚本---剧本,像剧本一样,让 ...
- php 大文件上传的实现
最近公司做工程项目,实现大文件上传 网上找了很久,发现网上很多代码大都存在很多问题,不过还是让我找到了一个符合要求的项目. 工程: 对项目的文件上传功能做出分析,找出文件上传的原理,对文件的传输模式深 ...
- 严格别名规则“-fstrict-aliasing”和“-fno-strict-aliasing”及类型双关
“-fstrict-aliasing”表示启用严格别名规则,“-fno-strict-aliasing”表示禁用严格别名规则,当gcc的编译优化参数为“-O2”.“-O3”和“-Os”时,默认会打开“ ...
- 用jquery制作一个二级导航下拉菜单
1使用$(function(){...})获取到想要作用的HTML元素. 2通过使用children()方法寻找子元素. 3通过使用show()方法来显示HTML元素. 4通过 ...