C# NPOI操作Excel(下)
根据自己项目需求编写,仅供参考
个人建议:使用Excel模板进行导出操作。尽量避免自己生成Excel(既繁琐又容易出BUG)。大多情况下导出Excel都是固定格式,使用模板导出会方便很多。
public class NpoiExcelHelper
{
/// <summary>
/// 读取excel转为DataTable
/// </summary>
/// <param name="fileName">文件路径</param>
/// <param name="sheetName">指定sheet</param>
/// <param name="isColumnName">第一行是否为列名</param>
/// <param name="startRow">从第几行开始</param>
/// <returns></returns>
public static DataTable ExcelToDataTable(string fileName, string sheetName, bool isColumnName, int startRow = )
{
IWorkbook workBook = null;
ISheet sheet = null;
DataTable dt = new DataTable();
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
//低于2007版本
if (Path.GetExtension(fileName) == ".xls")
{
workBook = new HSSFWorkbook(fs);
}
//2007及以上版本
else if (Path.GetExtension(fileName) == ".xlsx")
{
workBook = new XSSFWorkbook(fs);
}
}
//判断是否指定sheet上传
if (sheetName != null)
{
//获取指定sheet
sheet = workBook.GetSheet(sheetName);
if (sheet == null)
{
//获取不到时取第一个sheet
sheet = workBook.GetSheetAt();
}
}
else
{
sheet = workBook.GetSheetAt();
}
if (sheet != null)
{
//sheet中第一行
IRow firstRow = sheet.GetRow();
if (firstRow == null)
{
throw new Exception("首行无数据");
} //遍历第一行的单元格
for (int i = firstRow.FirstCellNum; i < firstRow.LastCellNum; i++)
{
//得到列名
ICell cell = firstRow.GetCell(i);
if (cell != null)
{
//得到列名的值,若列名不是字符则不能使用StringCellValue,最好使用ToString()
string cellValue = cell.ToString();
if (cellValue != null)
{
try
{
//判断第一行是否是列名
if (isColumnName)
{
//将列放入datatable中
DataColumn column = new DataColumn(cellValue);
dt.Columns.Add(column);
}
else
{
//将空列放入datatable中
DataColumn column = new DataColumn();
dt.Columns.Add(column);
}
}
catch
{
throw new Exception("列名有误!");
}
}
startRow = sheet.FirstRowNum + ;
}
}
//遍历所有行
for (int i = startRow; i <= sheet.LastRowNum; i++)
{
//得到i行
IRow row = sheet.GetRow(i);
if (row == null)
{
continue;
}
//datatable新增行
DataRow dr = dt.NewRow();
//遍历i行的单元格
for (int j = row.FirstCellNum; j < row.LastCellNum; j++)
{
if (row.GetCell(j) != null)
{
dr[j] = row.GetCell(j).ToString();
}
}
try
{
//将行放入datatable中
dt.Rows.Add(dr);
}
catch
{
throw new Exception("第" + i + "行有误!");
}
}
}
return dt;
}
/// <summary>
/// DataTable导出到Excel
/// </summary>
/// <param name="fileName">导出文件的路径</param>
/// <param name="templetName">导出模板路径</param>
/// <param name="dt">DataTable</param>
/// <param name="titleName">文件标题</param>
/// <param name="sheetName">文件sheet名称</param>
public static void DataTableToExcel(string fileName,string templetName, DataTable dt, string titleName,string sheetName)
{
FileStream fs1 = new FileStream(templetName, FileMode.Open, FileAccess.Read);
IWorkbook workBook = new HSSFWorkbook(fs1);
ISheet sheet = workBook.GetSheet(sheetName); //第一行
IRow row0 = sheet.GetRow();
ICell cellTitle = row0.GetCell();
cellTitle.SetCellValue(titleName);
//第二行
IRow row1 = sheet.GetRow();
for (int j = ; j < dt.Columns.Count; j++)
{
ICell cell = row1.GetCell(j);
cell.SetCellValue(dt.Columns[j].ColumnName);
}
for (int i = ; i < dt.Rows.Count; i++)
{
IRow rowi = sheet.CreateRow(i + );
for (int j = ; j < dt.Columns.Count; j++)
{
//创建单元格
ICell cell = rowi.CreateCell(j);
//给单元格赋值
cell.SetCellValue(dt.Rows[i][j].ToString());
cell.CellStyle.BorderBottom = BorderStyle.Thin;
cell.CellStyle.BorderLeft = BorderStyle.Thin;
}
}
using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
workBook.Write(fs);
}
}
}
C# NPOI操作Excel(下)的更多相关文章
- C#开发中使用Npoi操作excel实例代码
C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...
- 使用NPOI操作Excel文件及其日期处理
工作中经常遇到需要读取或导出Excel文件的情况,而NPOI是目前最宜用.效率最高的操作的Office(不只是Excel哟)文件的组件,使用方便,不详细说明了. Excel工作表约定:整个Excel表 ...
- NPOI操作Excel辅助类
/// <summary> /// NPOI操作excel辅助类 /// </summary> public static class NPOIHelper { #region ...
- NPOI操作excel之写入数据到excel表
在上一篇<NPOI操作excel之读取excel数据>我们把excel数据写入了datatable中,本篇就讲如何把datatable数据写入excel中. using System; u ...
- 用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 ...
- C# 如何使用NPOI操作Excel以及读取合并单元格等
C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...
- 用NPOI操作EXCEL-锁定列CreateFreezePane()
public void ExportPermissionRoleData(string search, int roleStatus) { var workbook = new HSSFWorkboo ...
- .NET 通过 NPOI 操作 Excel
目录 .NET 通过 NPOI 操作 Excel 第一步:通过 NuGet 获取 NPOI 包并引入程序集 第二步:引入 NPOI 帮助类 第三步:在程序中调用相应的方法对数据进行导出导入操作 将 D ...
- 2.6.2 用NPOI操作EXCEL--设置密码才可以修改单元格内容
2.6.2 用NPOI操作EXCEL--设置密码 有时,我们可能需要某些单元格只读,如在做模板时,模板中的数据是不能随意让别人改的.在Excel中,可以通过“审阅->保护工作表”来完 ...
- [Solution] NPOI操作Excel
NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 ...
随机推荐
- HDU 1020.Encoding-字符压缩
Encoding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- DP 贪心【p2134】百日旅行
Background 重要的不是去哪里,而是和你在一起.--小红 对小明和小红来说,2014年7月29日是一个美好的日子.这一天是他们相识100天的纪念日. (小明:小红,感谢你2场大考时默默的支持, ...
- Dfs【p1454】 圣诞夜的极光
题目描述-->p1454 圣诞夜的极光 题意概括: 寻找联通块数量,这里的连通块定义与其他的不同. 这里定义为曼哈顿距离不超过2的都属于一个联通块. 什么?不知道曼哈顿距离是啥? 曼哈顿距离简易 ...
- POJ1679 The Unique MST(Kruskal)(最小生成树的唯一性)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 27141 Accepted: 9712 D ...
- luogu P1418 选点问题
题目描述 给出n个点,m条边,每个点能控制与其相连的所有的边,要求选出一些点,使得这些点能控制所有的边,并且点数最少.同时,任意一条边不能被两个点控制 输入输出格式 输入格式: 第一行给出两个正整数n ...
- 1.2(Spring学习笔记)Spring中的Bean
一.<Bean>的属性及子元素 在1.1中我们对<Bean>有了初步的认识,了解了一些基本用法. 现在我们进一步理解<Bean>属性及子元素. 我们先来看下< ...
- 一个页面如何放多个百度编辑器 Ueditor 1.4.3?PHP如何获取Ueditor 的值?
问题1:一个页面如何放置多个Ueditor? 参考代码如下: <form method="post" action="save.php"> < ...
- 关于JS中原型链中的prototype与_proto_的个人理解与详细总结
一直认为原型链太过复杂,尤其看过某图后被绕晕了一整子,今天清理硬盘空间(渣电脑),偶然又看到这图,勾起了点回忆,于是索性复习一下原型链相关的内容,表达能力欠缺逻辑混乱别见怪(为了防止新人__(此处指我 ...
- Git -- 自己项目关联新建的git
- Oracle中读取数据一些原理研究
文章很多摘录了 http://blog.163.com/liaoxiangui@126/blog/static/7956964020131069843572/ 同时基于这篇文章的基础上,补充一些学习要 ...