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(0);

    //设置隐藏列 为 不隐藏
    for (int iHide = 0; iHide <= 40; iHide++) {
        sheet.SetColumnHidden(iHide, false);
    }    

    //最后一列的标号(即总的行数)
    int rowCount = sheet.LastRowNum;

    //获取sheet的首行
    HSSFRow headerRow = (HSSFRow)sheet.GetRow(0);
    //一行最后一个方格的编号(即总的列数)
    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 + 1); 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[33].ToString())
            && string.IsNullOrEmpty(dataRow[38].ToString())
            )
        {
            break;//读取结束 退出For循环
        }
        else
        {
            dt.Rows.Add(dataRow);
        }

    }

    workbook = null;
    sheet = null;

    return dt;
}

#endregion
时间: 2024-11-06 10:08:58

NPOI 读取excel到DataTable 读取隐藏列 读取公式列的相关文章

使用NPOI读取Excel到DataTable

一.NPOI介绍: 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作 二.安装NPOI 新建控制台应用程序>管理NuGet程序包>搜索NPOI>安装NPOI 三.下面是我需要的读取的Excel文件,数据格式如下: 四.添加ExcelHelper类: using System; using NPOI.SS.User

.net读取Excel转datatable、.net读取的Excel存在合并单元格并且转成datatable

项目中经常会遇到Excel导入数据,Excel的模板会可能是存在合并单元格的,模板如下图所示 读取时需要填充合并单元格的值,转成datatable单元格值时,填充合并单元格的值,如下图所示: 合并单元格的值填充,这种格式的datatable使用SqlBulkCopy批量导入更为方便 Excel转datatable方法代码: /// <summary> /// Excel转DataTable /// </summary> /// <param name="filePa

读取excel到DataTable

/// <summary>读取excel /// 默认第一行为表头,导入第一个工作表 /// </summary> /// <param name="strFileName">excel文档路径</param> /// <returns></returns> public static DataTable Import(string strFileName) { DataTable dt = new DataTab

NPOI导入excel为datatable (xls xlsx xlsm)

使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中 http://www.cnblogs.com/songrun/p/3547738.html NPOI 2.0教程 – 自动识别Excel 2003或2007格式 http://tonyqus.sinaapp.com/archives/482 NPOI 2.0 教程 http://tonyqus.sinaapp.com/npoi2tutorial using System; using System.Collection

C#读取Excel的其中一种方式OleDb读取(100万条)--快速大量插入SQL中

主要运用表类型 1 Create table BulkTestTable( 2 Id nvarchar(32), 3 UserName nvarchar(32), 4 Pwd nvarchar(32) 5 ) 6 Go 7 CREATE TYPE BulkUdt AS TABLE 8 (Id nvarchar(32), 9 UserName nvarchar(32), 10 Pwd nvarchar(32) ) C#端读取Excel /// <summary> /// 读取Excel中数据 /

java读取excel文件内容,并将读取到的内容写入到另一文件中

需要导入的jar包下载地址https://pan.baidu.com/s/16cTpUfx0KvKkbGYkXAUKMA 代码:ReadExcel.java //信1605-3 20163432 张运涛 package domain; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import jxl.Cell; import jxl.CellType; import jxl.Sh

读取EXCEL的方法(用范围区域读取数据)

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Diagnostics; using Micr

ASP.NET MVC使用NPOI读取excel数据

一.下载引用 目前官网不能直接下载到引用的dll,需要自己打包(我没有自己打包,我有现成的DLL,地址:https://files.cnblogs.com/files/dengxixi/NPOIdll.7z),即:NPOI.dll,NPOI.OOXML.dll,NPOI.OpenXml4Net.dll,ICSharpCode.SharpZipLib.dll(office2007版需要此dll). 二.创建MVC项目,页面代码: <html> <head> <meta name

C#读取excel等表格常用方法

0. 利用NPOI. 请查阅此插件的相关文档. 1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public DataSet ExcelToDS(string Path) { string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +"