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 4528 小明系列故事――捉迷藏
广搜. 根据题意,可以知道状态总共有$4*n*m$种.每一个位置四种状态:两个都没有发现:发现$E$没发现$D$:发现$D$没发现$E$:两个都发现. 每次移动的花费都是$1$,队列里面状态的费用是单 ...
- 【set】【multiset】bzoj1058 [ZJOI2007]报表统计
对n个位置,每个位置维护一个vector. 每次插入,可能对MIN_SORT_GAP产生的影响,只可能是 插入元素 和 它的 前驱 后继 造成的,用一个set维护(存储所有序列中的元素). 我们还得维 ...
- JavaSE目录
常识,环境变量,注释 标示符,常量,进制转换,类型转换,位运算符,语句 数组,函数 面向对象 多线程 String 包装类 集合 其他对象 IO流,IO流--FileReader&&F ...
- 安装scrapy报错问题解决
今天在安装scrapy时候,最后一步出现下面报错(操作系统为centerOS 6.4) error: Setup script exited with error: command 'gcc' fai ...
- 关于MYsql 多字段排序
SELECT switch_data.* , lan_data.ename FROM switch_data , lan_data WHERE switch_data.address = '佳合丽景' ...
- js之对象(经典)
一.对象的定义: 对象是JavaScript的一个基本数据类型,是一种复合值,它将很多值(原始值或者其他对象)聚合在一起,可通过名字访问这些值.即属性的无序集合. 二.对象的创建(多种方法) 1.对象 ...
- 【转】谈基于SOA的应用系统设计和开发
注:在网上看到这篇文档,觉得写得很好,清晰实用.该博客其它文章也写得不错 地址:http://blog.sina.com.cn/s/blog_493a84550101gswn.html 现在对 ...
- jquery ui autocomplete
//条码录入,自动完成功能 function addAutoComplete() { $('#txt_spuNo').autocomplete({ autoFocus: true, source: f ...
- servlet之request和response的使用区分
有的时候在写servlet程序时,我总是被一个方法该用request去调用.还是用response去调用而困惑.从而造成编程时间的延长. 我在区分request和response的使用时,使用的方法是 ...
- Linux的PCI驱动分析
1. 关键数据结构 PCI设备上有三种地址空间:PCI的I/O空间.PCI的存储空间和PCI的配置空间.CPU可以访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程序使用,而配置 ...