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操作都没有问题,读写合并单 ...
随机推荐
- JS下拉页面时一个横幅的样式和js
整理之前的代码,发现有一个js,就是页面往下浏览时,上面的商品名称和购买按钮在页面上方悬浮的,就整理下来,代码如下: <script type="text/javascript&quo ...
- Reading CLR via c# 4th Edition
In fact, at runtime, the CLR has no idea which programming language the developer used for thesource ...
- python之初级篇2
一.数字类型 1)整数 int 类型 - bit_length() # 查询以二进制表示一个数字的值所需的位数 - int.from_bytes(bytes,byteorder) # 返回给定字节数组 ...
- 58.UIScrollView XIB拖拽约束
第一步: 拖拽UIScrollView 到控制器上 ,给scrollView 添加约束 ,这时是正常的 第二步:scrollview上添加UIview ,(注意:这个 ScrollView就是根据这个 ...
- 常用模块 plus
一.os 模块 1. os os.makedirs 创建多级目录 os.mkdir 只能创建一层 如果是多层,上层文件夹必须存在 os.removedirs 删除目录集中所有空文件夹 os.rm ...
- 2019.01.21 bzoj3674: 可持久化并查集加强版(主席树+并查集)
传送门 题意:维护可持久化并查集,支持在某个版本连边,回到某个版本,在某个版本 询问连通性. 思路: 我们用主席树维护并查集fafafa数组,由于要查询历史版本,因此不能够用路径压缩. 可以考虑另外一 ...
- poj-2777(区间线段树,求种类数模板)
题目链接:http://poj.org/problem?id=2777 参考文章:https://blog.csdn.net/heucodesong/article/details/81038360 ...
- MacOS使用常用配置
如何增加tree命令? 安装Homebrew步骤:http://blog.csdn.net/xianyiqi/article/details/51297562 安装npm步骤:https://blog ...
- 同时安装python2.7和python3.5
同时安装python2.7和python3.5,并配置sublime ctrl+B选择运行python版本 安装python 首先是安装两个版本的python,并配置相应的环境变量 1.在下载安装好P ...
- Jersey RESTful WebService框架学习(四)使用@FormParam
前端 <form action="/Jersey/api/1.0/my/form" method="post"> <input type=&q ...