NPOI 操作笔记

  1 public static class ExcelUtil
  2 {
  3     // Methods
  4     public static DataTable GetDataTable(Stream stream)
  5     {
  6         HSSFWorkbook workbook;
  7         try
  8         {
  9             workbook = new HSSFWorkbook(stream);
 10         }
 11         catch (Exception exception)
 12         {
 13             throw exception;
 14         }
 15         ISheet sheetAt = workbook.GetSheetAt(0);
 16         IEnumerator rowEnumerator = sheetAt.GetRowEnumerator();
 17         DataTable table = new DataTable();
 18         IRow row = sheetAt.GetRow(0);
 19         if (row != null)
 20         {
 21             for (int j = 0; j < row.LastCellNum; j++)
 22             {
 23                 ICell cell = row.GetCell(j);
 24                 if (cell == null)
 25                 {
 26                     table.Columns.Add("cell" + j.ToString());
 27                 }
 28                 else
 29                 {
 30                     table.Columns.Add(cell.ToString());
 31                 }
 32             }
 33         }
 34         int count = table.Columns.Count;
 35         for (int i = 0; rowEnumerator.MoveNext(); i++)
 36         {
 37             if (i > 0)
 38             {
 39                 IRow current = (HSSFRow) rowEnumerator.Current;
 40                 DataRow row3 = table.NewRow();
 41                 for (int k = 0; k < count; k++)
 42                 {
 43                     ICell cell2 = current.GetCell(k);
 44                     if (cell2 == null)
 45                     {
 46                         row3[k] = null;
 47                     }
 48                     else
 49                     {
 50                         row3[k] = cell2.ToString();
 51                     }
 52                 }
 53                 table.Rows.Add(row3);
 54             }
 55         }
 56         return table;
 57     }
 58
 59     public static DataTable GetDataTable(string filePath)
 60     {
 61         HSSFWorkbook workbook;
 62         try
 63         {
 64             using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
 65             {
 66                 workbook = new HSSFWorkbook(stream);
 67             }
 68         }
 69         catch (Exception exception)
 70         {
 71             throw exception;
 72         }
 73         ISheet sheetAt = workbook.GetSheetAt(0);
 74         IEnumerator rowEnumerator = sheetAt.GetRowEnumerator();
 75         DataTable table = new DataTable();
 76         IRow row = sheetAt.GetRow(0);
 77         if (row != null)
 78         {
 79             for (int j = 0; j < row.LastCellNum; j++)
 80             {
 81                 ICell cell = row.GetCell(j);
 82                 if (cell == null)
 83                 {
 84                     table.Columns.Add("cell" + j.ToString());
 85                 }
 86                 else
 87                 {
 88                     table.Columns.Add(cell.ToString());
 89                 }
 90             }
 91         }
 92         int count = table.Columns.Count;
 93         for (int i = 0; rowEnumerator.MoveNext(); i++)
 94         {
 95             if (i > 0)
 96             {
 97                 IRow current = (HSSFRow) rowEnumerator.Current;
 98                 DataRow row3 = table.NewRow();
 99                 for (int k = 0; k < count; k++)
100                 {
101                     ICell cell2 = current.GetCell(k);
102                     if (cell2 == null)
103                     {
104                         row3[k] = null;
105                     }
106                     else
107                     {
108                         row3[k] = cell2.ToString();
109                     }
110                 }
111                 table.Rows.Add(row3);
112             }
113         }
114         return table;
115     }
116
117     /// <summary>
118       /// 导入数据到excel文件
119       /// </summary>
120       /// <param name="data">待导入的数据</param>
121       /// <param name="fileName">文件路径</param>
122       /// <param name="sheetName">excel表名</param>
123       /// <param name="hiddenColmnIndexs">隐藏列索引</param>
124       /// <param name="header">列头字典;原始列头=>重命名列名</param>
125       /// <param name="redHeaderClomnIndexs">标记红色加粗的列索引</param>
126       /// <param name="comments">列头批注字典;列名=>批注内容</param>
127       /// <returns></returns>
128         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)
129         {
130             int num4 = 0;
131             int num = 0;
132             int column = 0;
133             int rownum = 0;
134             ISheet sheet = null;
135             IWorkbook workbook = new HSSFWorkbook();
136             //todo:tans
137            var stream = new FileStream(fileName ,FileMode.OpenOrCreate,FileAccess.ReadWrite);
138
139             try
140             {
141                 sheet = workbook.CreateSheet(sheetName);
142
143
144                 IRow row = sheet.CreateRow(0);
145                 column = 0;
146                 int maxCount = Math.Max(header!=null ? header.Count : 0 , data.Columns.Count);
147
148                 IDrawing patr1 = sheet.CreateDrawingPatriarch();// as HSSFPatriarch;
149                 //创建列头
150                 while (column < data.Columns.Count)
151                 {
152                     var col = data.Columns[column];
153                     var colName = col.ColumnName;
154                     ICell cell = row.GetCell(column);
155                     if (header!=null && header.ContainsKey(colName))
156                     {
157                         string temp = header[colName];//列重命名
158                         header.Remove(colName);
159                         cell = row.CreateCell(column);
160                         cell.SetCellValue(temp);
161                     }
162                     //创建批注
163                     colName = cell.StringCellValue;
164                     if (comments!=null && comments.ContainsKey(colName))
165                     {
166                         var commentStr = comments[colName];
167                         IComment comment1 = patr1.CreateCellComment(new HSSFClientAnchor(0, 0, 0, 0, 1, 3, 3, 7));// as HSSFComment;
168                         comment1.String = new HSSFRichTextString(commentStr);
169                         cell.CellComment = comment1;
170                     }
171                     column++;
172                 }
173                 //附加列头
174                 int colCount = data.Columns.Count;
175                 foreach (var colName in header.Keys)
176                 {
177                     row.CreateCell(colCount).SetCellValue(header[colName]);
178                     colCount++;
179                 }
180                 //设置列头样式
181                 redHeaderClomnIndexs = redHeaderClomnIndexs ?? new int[]{};
182                 for (int i = 0, l=0, rl= redHeaderClomnIndexs.Length; i < row.Cells.Count; i++,l++)
183                 {
184                     var cell = row.GetCell(i);
185                     if (cell==null)
186                     {
187                         continue;
188                     }
189                     //设置字体
190                     IFont font = workbook.CreateFont();
191                     font.Boldweight = (short)FontBoldWeight.BOLD;
192                     if (l < rl)
193                     {
194                         int index = redHeaderClomnIndexs[l];
195                         cell = row.GetCell(index);
196                         font.Color = (short)FontColor.RED;
197                     }
198                     //设置样式
199                     ICellStyle style = workbook.CreateCellStyle();
200                     style.Alignment = HorizontalAlignment.CENTER;
201                     style.SetFont(font);
202
203                     cell.CellStyle = style;
204                 }
205                //创建数据列,并填充数据
206                 rownum = 1;
207                 for (num = 0; num < data.Rows.Count; num++)
208                 {
209                     IRow row2 = sheet.CreateRow(rownum);
210                     for (column = 0; column < data.Columns.Count; column++)
211                     {
212                         row2.CreateCell(column).SetCellValue(data.Rows[num][column].ToString());
213                     }
214                     rownum++;
215                 }
216                 //设置隐藏列
217                 if (hiddenColmnIndexs != null && hiddenColmnIndexs.Length <= column)
218                 {
219                     for (int i = 0, l = hiddenColmnIndexs.Length; i < l; i++)
220                     {
221                         sheet.SetColumnHidden(hiddenColmnIndexs[i], true);
222                     }
223                 }
224                 //当创建完毕所有cell,设置居中才有效
225                 for (int i = 0; i < row.Cells.Count; i++)
226                 {
227                      sheet.AutoSizeColumn(i);
228                 }
229                 workbook.Write(stream);
230             }
231             catch (Exception ex)
232             {
233                 return null;
234             }
235             finally
236             {
237                 stream.Close();
238             }
239            return fileName;
240         }
241 }
242
243  
时间: 2024-10-20 14:07:28

NPOI 操作笔记的相关文章

Echarts字体和线条颜色设置操作笔记

这篇文章主要讲述Echarts设置字体和线条的颜色相关操作笔记,希望文章对你有所帮助,主要是自己的在线笔记吧.我在前面先放各种修改前后图片颜色的对照,后面再详细介绍代码.这样更方便阅读及读者知道,是否对自己有所帮助,其重点是如何在模板动态网页或JSP网站中插入Echarts图片.        1.修改标题及背景颜色    2.设置柱形图颜色 3.修改坐标轴字体颜色        4.设置Legend颜色 5.修改折线颜色    6.修改油表盘字体大小及颜色 7.柱状图文本鼠标浮动上的颜色设置

NPOI操作Excel 003:写入空Excel

对于NPOI操作Excel前面已经有了简单认识(http://blog.csdn.net/yysyangyangyangshan/article/details/42614209).继续来看如何将内容保存至Excel中.根据前面的经验NPOI操作Excel主要的几个对象分别是:workbook,sheet以及sheet内的row和cell.所以保存至Excel也是对这几个对象进行操作.当然我们平时使用Excel时不光要在单元格中保存内容,还要设置单元格的格式以及字体大小等,也就是格式和样式.这些

Python简单操作笔记

Python 类型转换 str(),repr()|format() : 将非字符类型转成子串 int() : 转为整形 float() : 转为浮点型 list(s) : 将字串s转成列表 tuple(s) : 将字串s转成元组 set(s) : 将字串s转成集合 frozenset(s) : 将字串s转成不可变集合 dict(s) : 创建字典 其d必须是(key,value)的元组序列; chr(x) : 将整形转成字符 ord(x) : 将字符转成整形 hex(x) : 将整形转换成16进

NPOI操作excel——利用反射机制,NPOI读取excel数据准确映射到数据库字段

> 其实需求很明确,就是一大堆不一样的excel,每张excel对应数据库的一张表,我们需要提供用户上传excel,我们解析数据入库的功能实现. 那么,这就涉及到一个问题:我们可以读出excel的表头,但是怎么知道每个表头具体对应数据库里面的字段呢? 博主经过一段时间的思考与构思,想到一法:现在的情况是我们有excel表A,对应数据库表B,但是A与B具体属性字段的映射关系我们不知.那我们是不是可以有一个A到B的映射文件C呢? 我想,说到这,大家就很明了了... 第一步:为每张excel创建一个与

数据字典生成工具之旅(4):NPOI操作EXECL

这篇会介绍NPOI读写EXECL,读写EXECL的组件很多,可以使用微软自己的COM组件EXECL.exe读写,不过这种方式限制很大. 1:客户环境必须装Office(虽然现在机子上不装Office的几乎没有吧) 2:EXECL读写完毕后EXECL还有进程还留在后台  ,内存回收不了 基于以上的原因,就采用了开源组件NPOI进行操作了. 阅读目录 NPOI简介 简单示例 NPOI在本工具的使用及总结 工具源代码下载 学习使用 回到顶部 NPOI简介 1.Excel表格叫做工作表:WorkBook

【原】hive 操作笔记

1.建表: hive> CREATE TABLE pokes (foo INT, bar STRING);hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);由于很多数据在hadoop平台,当从hadoop平台的数据迁移到hive目录下时,由于hive默认的分隔符是/u0001,为了平滑迁移,需要在创建表格时指定数据的分割符号,语法如下:create table ooo(uid string,n

SQL SERVER 时间相关操作笔记

1.DATEADD函数: A.  MSDN上的示例:http://msdn.microsoft.com/zh-cn/library/ms186819%28v=sql.90%29.aspx B. SQL2005上的示例 1 ----定义变量 2 DECLARE @start DATETIME,@end DATETIME 3 SET @start='2014-01-01' 4 SET @end='2014-06-16' 5 6 ---- 计算月份 7 SELECT DATEADD(YEAR,-6,@

Npoi操作excel

转载地址:http://www.cnblogs.com/knowledgesea/archive/2012/11/16/2772547.html Npoi操作excel Npoi 简介 1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.Npoi 下载地址:http://npoi.codeplex.com/releases/view/38113 3.Npoi 学习系列教程推荐:http://www.cnblogs.co

Linux Shell脚本与Vim常用操作笔记

本篇笔记记录最最基本的vim和shell操作. ShellScript能干什么 Shellscript类似与Windows的批处理,可以把很多指令汇总到一起,于是可以很容易地通过一个操作执行多个命令.很轻量,有效率. 在Vim中编写 Vim/Vi编辑器很强大,功能非常多,快捷键.指令更多,只需要知道最常用的就够了. Vi有3种工作模式 1.命令模式 进去之后的默认模式就是命令模式.能接受命令,但是不明文显示. 2.输入模式 命令模式按下a键就进入输入模式(还能按i.o.s等等).按Esc返回命令