NPOI ExcelToTable

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

namespace TestNopi
{
    public static class NPOIExcelToTable
    {
        private static string path = "D:\aaa.xls";
        static void Main(string[] args)
        {
            AcquireTwoArray(ImportExcelToTable(@"path", 0));
        }
        /// <summary>   
        /// 將Excel文件中的數據讀出到DataTable中(xls)   
        /// </summary>   
        /// <param name="file"></param>   
        /// <returns></returns>   
        public static DataSet ImportExcelToTable(string path, int index)
        {
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            using (FileStream fs = new FileStream(@"D:\aaa.xls", FileMode.Open, FileAccess.Read))
            {
                HSSFWorkbook hssfworkbook = new HSSFWorkbook(fs);

                ISheet sheet = hssfworkbook.GetSheetAt(index);
                //表頭   
                IRow header = sheet.GetRow(sheet.FirstRowNum);
                List<int> columns = new List<int>();
                for (int i = 0; i < header.LastCellNum; i++)
                {
                    object obj = GetValueTypeForXls(header.GetCell(i) as HSSFCell);
                    if (obj == null || obj.ToString() == string.Empty)
                    {
                        dt.Columns.Add(new DataColumn("Columns" + i.ToString()));
                    }
                    else
                        dt.Columns.Add(new DataColumn(obj.ToString()));
                    columns.Add(i);
                }
                //數據   
                for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
                {
                    DataRow dr = dt.NewRow();
                    bool hasValue = false;
                    foreach (int j in columns)
                    {
                        dr[j] = GetValueTypeForXls(sheet.GetRow(i).GetCell(j) as HSSFCell);
                        if (dr[j] != null && dr[j].ToString() != string.Empty)
                        {
                            hasValue = true;
                        }
                    }
                    if (hasValue)
                    {
                        dt.Rows.Add(dr);
                    }
                }
                ds.Tables.Add(dt);
            }
            return ds;
        }
        /// <summary>   
        /// 獲取單元格類型(xls)   
        /// </summary>   
        /// <param name="cell"></param>   
        /// <returns></returns>   
        private static object GetValueTypeForXls(HSSFCell cell)
        {
            if (cell == null)
                return null;
            switch (cell.CellType)
            {
                case CellType.BLANK: //BLANK:   
                    return null;
                case CellType.BOOLEAN: //BOOLEAN:   
                    return cell.BooleanCellValue;
                case CellType.NUMERIC: //NUMERIC:   
                    return cell.NumericCellValue;
                case CellType.STRING: //STRING:             
                    return cell.StringCellValue;
                case CellType.ERROR: //ERROR:   
                    return cell.ErrorCellValue;
                case CellType.FORMULA: //FORMULA:   
                default:
                    return "=" + cell.CellFormula;
            }
        }
        public static void AcquireTwoArray(DataSet ds)
        {

            foreach (DataTable dt in ds.Tables)//遍歷所有的DataTable
            {
                foreach (DataRow dr in dt.Rows)//遍歷所有的行
                {
                    foreach (DataColumn dc in dt.Columns)//遍歷所有的列
                    {
                        Console.Write("{0},{1},{2}", dt.TableName, dc.ColumnName, dr[dc].ToString());//表名,列名,單元格數據
                    }
                }

            }

        }

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章