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.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.POIFS.FileSystem;
using NPOI.OpenXml4Net.OPC;

namespace weirManagement.BaseClass
{
    public class NPOIHelper : BaseClass
    {
        //public class WorkbookFactory
        //{
        //    public static IWorkbook Create(POIFSFileSystem fs){...}
        //    public static IWorkbook Create(OPCPackage pkg){...}
        //    public static IWorkbook Create(Stream inputStream){...}
        //    public static IFormulaEvaluator CreateFormulaEvaluator(IWorkbook workbook){...}
        //}

        /// <summary>
        /// Excel某sheet中内容导入到DataTable中
        /// 区分xsl和xslx分别处理
        /// </summary>
        /// <param name="filePath">Excel文件路径,含文件全名</param>
        /// <param name="sheetName">此Excel中sheet名</param>
        /// <returns></returns>
        //public DataTable ExcelSheetImportToDataTable(string filePath, string sheetName)
        public DataTable ExcelImportToDataTable(string filePath)
        {
            DataTable dt = new DataTable();
            //.xlsx  //.xlsm
            #region .xlsx文件处理:XSSFWorkbook
            try
            {
                using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    IWorkbook wb = WorkbookFactory.Create(file);
                    ISheet sheet = wb.GetSheetAt(0);//.GetSheet(sheetName);
                    System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
                    IRow headerRow = sheet.GetRow(0);
                    //一行最后一个方格的编号 即总的列数
                    for (int j = 0; j < sheet.GetRow(0).LastCellNum; j++)
                    {
                        //SET EVERY COLUMN NAME
                        ICell cell = headerRow.GetCell(j);
                        if (cell != null && cell.ToString() != "")
                        {
                            dt.Columns.Add(cell.ToString());
                        }
                        else { continue; }

                    }
                    int colCount = dt.Columns.Count;

                    while (rows.MoveNext())
                    {
                        //IRow row = (XSSFRow)sheet.GetRow(j);
                        IRow row = (IRow)rows.Current;
                        DataRow dr = dt.NewRow();
                        bool addDR = false;
                        if (row.RowNum == 0) continue;//The firt row is title,no need import
                        for (int i = 0; i < colCount; i++)
                        {
                            //cell count>column count,then break //每条记录的单元格数量不能大于表格栏位数量 20140213                 
                             //cell count>column count,then break //每条记录的单元格数量不能大于DataTable的title
                            if (i >= colCount){ break; }

                            ICell cell = row.GetCell(i);

                            if ((i == 0) && (string.IsNullOrEmpty(cell.ToString()) == true))//每行第一个cell为空,break
                            {
                                break;
                            }
                            if (cell != null)
                            {
                                object o = cell;
                                //读取Excel格式,根据格式读取数据类型
                                switch (cell.CellType)
                                {
                                    case CellType.Blank: //空数据类型处理
                                        o = "";
                                        break;
                                    case CellType.String: //字符串类型
                                        o = cell.StringCellValue;
                                        break;
                                    case CellType.Numeric: //数字类型
                                        if (DateUtil.IsCellDateFormatted(cell))
                                        { o = cell.DateCellValue; }
                                        else
                                        {
                                            o = cell.ToString();
                                        }
                                        break;
                                    case CellType.Formula:
                                        //HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(hssfworkbook);
                                        IFormulaEvaluator e = WorkbookFactory.CreateFormulaEvaluator(wb);
                                        o = e.Evaluate(cell).StringValue;
                                        break;
                                    default:
                                        o = "";
                                        break;
                                }
                                dr[i] = Convert.ToString(o);//row.GetCell(j).StringCellValue;
                                addDR = true;
                            }
                        }
                        if (addDR)
                        {
                            dt.Rows.Add(dr);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            #endregion
            return dt;
        }
  }
}
                                
时间: 2024-10-15 14:52:33

NPOI导入excel为datatable (xls xlsx xlsm)的相关文章

JS-XLS/X读取和解析Excel表格文件(xls/xlsx)的JavaScript插件

最近有一个要求,我的一个项目中解析Excel文件(与xls/xlsx扩展)在浏览器(使用JavaScript当然).所以我在网上看了一下,发现了这2个有用的库: js-xls js-xlsx 让我们看看他们是如何工作的. 兼容性 支持读取文件格式 Excel 2007+ XML Formats (XLSX/XLSM) Excel 2007+ Binary Format (XLSB) Excel 2003-2004 XML Format (XML "SpreadsheetML") Exc

使用NPOI导入Excel注意日期格式和数字格式

//使用NPOI导入Excel public static DataTable importExcelToDataSetUsingNPOI(string FilePath, string fileName) { DataSet myDs = new DataSet(); DataTable dt = new DataTable("mytable"); myDs.Tables.Add(dt); DataRow myRow; myDs.Clear(); try { using (Strea

NPOI 导入Excel和读取Excel

1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 3.POI读取Excel有两种格式一个是HSSF,另一个是XSSF. HSSF和XSSF的区别如下: HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is the

NPOI导入excel

1.引用NPOI: using NPOI.HSSF.UserModel;using NPOI.HSSF.Util;using NPOI.SS.UserModel; 2.导出excel 1 private void btnadd_MouseUp(object sender, MouseButtonEventArgs e) 2 { 3 try 4 { 5 #region 打印导出无统计数据 6 if (dt != null && dt.Rows.Count > 0) 7 { 8 //创建

POI读取加密的EXCEL(兼容XLS,XLSX格式)

最近项目里需要读取加密的excel,有xls和xlsx两种类型,对于加解密apache官方网站有简要说明 需要的jar包poi-3.9,jar    poi-ooxml-3.9.jar  poi-ooxml-schemas-3.9.jar   xmlbeans-2.3.0.jar  dom4j-1.6.1.jar 注意poi的3个jar版本号要对应,不然会有一些问题. 上代码咯~ /** * Excel导入 */ @SuppressWarnings("unchecked") @Requ

NPOI导入Excel数据

using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using System;using System.Collections.Generic;using System.Data;using System.IO;using System.Linq;using System.Text; namespace Common{ ///使用此代码需要添加NPOI的dll引用 public class Exc

使用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 C# 关于使用npoi导入excel 所遇到的问题PublicKeyToken=0df73ec7942b34e1

最近在做一些小项目,需要使用导入导出excel表格从数据库,最常用的还是npoi这个开源类库吧 以下是基本代码 //创建一个excel表,就是创建workbook HSSFWorkbook wk=new HSSFWorkbook (); ISheet sheet=wk.CreateSheet("work1"); for(int i=0;i<10;i++) { IRow row=sheet.CreateRow(i); ICell c1=row.CreateCell (0); ICe

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"), &