NPOI 读取excel到DataTable 读取隐藏列 读取公式列
处理思路:
1.打开excel 用NPOI进行读取;
2.读取第一个Sheet;
读取过程中:
a.先设置相应列 不隐藏
b.读取Cell时 先判断是否的包含公式
相应代码如下:
public static DataTable ReadDataFromExcelByNPOI()
{
DataTable dt = new DataTable(); var filePathAndName = Path.Combine(Server.MapPath("~/Content/Excel"), "ExcelForUploadTest.xls");
//打开文件读取数据
stream = System.IO.File.Open(filePathAndName2, FileMode.Open); //通过Stream创建Workbook
HSSFWorkbook workbook = new HSSFWorkbook(stream); //获取excel的第一个sheet
HSSFSheet sheet = (HSSFSheet)workbook.GetSheetAt(); //设置隐藏列 为 不隐藏
for (int iHide = ; iHide <= ; iHide++) {
sheet.SetColumnHidden(iHide, false);
} //最后一列的标号(即总的行数)
int rowCount = sheet.LastRowNum; //获取sheet的首行
HSSFRow headerRow = (HSSFRow)sheet.GetRow();
//一行最后一个方格的编号(即总的列数)
int cellCount = headerRow.LastCellNum; string columnNames = @"A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,
AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,AZ";
string[] columns = columnNames.Split(','); //使用 A B C D ... 字母的方式 命名DataTable的各列名
for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
//DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
DataColumn column = new DataColumn(columns[i]);
dt.Columns.Add(column);
} for (int i = (iHeaderRowIndex.Value + ); i <= rowCount; i++)
{
HSSFRow row = (HSSFRow)sheet.GetRow(i);
DataRow dataRow = dt.NewRow();
if (row != null)
{
for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
{
//如果是公式Cell
//则仅读取其Cell单元格的显示值 而不是读取公式
if (row.GetCell(j).CellType == CellType.FORMULA)
{
dataRow[j] = row.GetCell(j).StringCellValue;
}else{
dataRow[j] = row.GetCell(j).ToString();
}
}
}
} //某标示列 33
//某标示列 38
//其值非空 标示是有效数据
//其值为空 标示结束
if(string.IsNullOrEmpty(dataRow[].ToString())
&& string.IsNullOrEmpty(dataRow[].ToString())
)
{
break;//读取结束 退出For循环
}
else
{
dt.Rows.Add(dataRow);
} } workbook = null;
sheet = null; return dt;
} #endregion
NPOI 读取excel到DataTable 读取隐藏列 读取公式列的更多相关文章
- Python 用load_workbook 读取excel某个单元格数据、读取excel行数、列数
from openpyxl import load_workbook path = r'D:\pywork\12' # EXCEL信息所在文件夹 e= load_workbook(path + '/' ...
- 使用NPOI读取Excel到DataTable
一.NPOI介绍: 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office ...
- .net读取Excel转datatable、.net读取的Excel存在合并单元格并且转成datatable
项目中经常会遇到Excel导入数据,Excel的模板会可能是存在合并单元格的,模板如下图所示 读取时需要填充合并单元格的值,转成datatable单元格值时,填充合并单元格的值,如下图所示: 合并单元 ...
- C#读取Excel,DataTable取值为空的解决办法
连接字符串这么些就行了 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + opnFileName ...
- C# 读取Excel到DataTable两种方式对比
方式一 OLEDB读取 数据库引擎 优点:读取速度快,依据sheet排序读取 缺点:对于Excel版本依赖强,无法读取指定sheet 错误提示:本地计算机未指定 Microsoft.ACE.OLEDB ...
- NPOI导入excel为datatable (xls xlsx xlsm)
使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中 http://www.cnblogs.com/songrun/p/3547738.html NPOI 2.0教程 – 自动 ...
- C#读取Excel的其中一种方式OleDb读取(100万条)--快速大量插入SQL中
主要运用表类型 Create table BulkTestTable( Id nvarchar(), UserName nvarchar(), Pwd nvarchar() ) Go CREATE T ...
- C#读取Excel的数据,并且以混合模式读取,防止数据类型变更
/// <summary> /// Read Excel to DataSet /// </summary> /// <param name="filename ...
- 用NPOI从Excel到DataTable
NPOI功能强大,不用装Excel,就可以操作表格中数据----Excel.Sheet------>DataTable private IWorkbook workbook = null; pr ...
随机推荐
- WPF 竖排文字
---恢复内容开始--- 想做一个WPF 文字竖排 类似上图.用在TabItem的header上面. <TextBlock FontSize="30" Text=" ...
- 根据IP地址获取地址所在城市帮助类(IPHelper)
很多类库都是需要在长时间的编写过程中进行积累的,进入软件编程行业已经是第五个年头了,从2011年写下第一行代码到现在不知道已经写了多少行代码了,时间也过得挺快的.最近事情比较多,也很少写博客了,最近项 ...
- Windows nexus 启动失败
现象: nexus Windows系统服务安装成功,但启动失败 D:\nexus-2.10.0-02-bundle\nexus-2.10.0-02\bin>nexus.bat Usage: ne ...
- [moka同学笔记]yii2 activeForm 表单样式的修改
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAv4AAANcCAIAAACopDy/AAAgAElEQVR4nOzdfXAb52H4ef1veSatRV
- javascript 之拼接html字符串
// var one = {"id":1, "leasetime":2, "ney":0,"myhuifangshi": ...
- 以Self Host的方式来寄宿Web API
Common类及实体定义.Web API的定义请参见我的上一篇文章:以Web Host的方式来寄宿Web API. 一.以Self Host寄宿需要新建一个Console控制台项目(SelfHost) ...
- stl空间配置器线程安全问题补充
摘要 在上一篇博客<STL空间配置器那点事>简单介绍了空间配置器的基本实现 两级空间配置器处理,一级相关细节问题,同时简单描述了STL各组件之间的关系以及设计到的设计模式等. 在最后,又关 ...
- jDiameter介绍以及使用
jDiameter是Diameter协议的开源实现(比较不幸的是AGPL 3.0协议),项目地址https://github.com/RestComm/jdiameter. 项目框架 jDiamete ...
- 【译】Dependency Injection with Autofac
先说下为什么翻译这篇文章,既定的方向是架构,然后为了学习架构就去学习一些架构模式.设计思想. 突然有一天发现依赖注入这种技能.为了使得架构可测试.易维护.可扩展,需要架构设计为松耦合类型,简单的说也就 ...
- [Tool] 使用Sublime Text开发Objective-C
[Tool] 使用Sublime Text开发Objective-C 前言 随着iPhone的热卖,开发iPhone APP所使用的Objective-C,也慢慢成为了热门的程序语言之一.本篇文章介绍 ...