zoukankan      html  css  js  c++  java
  • NPOI读取Excel的数据

    首先是给项目安装NPOI.DLL :Install-Package NPOI -Version 2.4.1

     1   HttpPostedFile upLoadPostFile = FileUpload1.PostedFile;
     2                 string upLoadPath = upLoadPostFile.FileName;
     3                 //ExcelToDataTable(upLoadPath);
     4                 string outs="";
     5                 DataSet ds=   ExcelToDataSet(upLoadPath, outs);
     6                 DataTable dtInfo = ds.Tables[0];
     7                 string ss = "";
     8                 for (int i = 0; i < dtInfo.Rows.Count; i++)
     9                 {
    10                     //ss = dtInfo.Rows[i].ToString();
    11                     ss = dtInfo.Rows[i+1][0].ToString();
    12                 }
      1   /// <summary>
      2         /// Excel转换成DataSet(.xlsx/.xls)
      3         /// </summary>
      4         /// <param name="filePath">Excel文件路径</param>
      5         /// <param name="strMsg"></param>
      6         /// <returns></returns>
      7         public static DataSet ExcelToDataSet(string filePath,  string strMsg)
      8         {
      9             strMsg = "";
     10             DataSet ds = new DataSet();
     11             DataTable dt = new DataTable();
     12             string fileType = Path.GetExtension(filePath).ToLower();
     13             string fileName = Path.GetFileName(filePath).ToLower();
     14             try
     15             {
     16                 ISheet sheet = null;
     17                 int sheetNumber = 0;
     18                 FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
     19                 if (fileType == ".xlsx")
     20                 {
     21                     // 2007版本
     22                     XSSFWorkbook workbook = new XSSFWorkbook(fs);
     23                     sheetNumber = workbook.NumberOfSheets;
     24                     for (int i = 0; i < sheetNumber; i++)
     25                     {
     26                         string sheetName = workbook.GetSheetName(i);
     27                         sheet = workbook.GetSheet(sheetName);
     28                         if (sheet != null)
     29                         {
     30                             dt = GetSheetDataTable(sheet,  strMsg);
     31                             if (dt != null)
     32                             {
     33                                 dt.TableName = sheetName.Trim();
     34                                 ds.Tables.Add(dt);
     35                             }
     36                             else
     37                             {
     38                                 MessageBox.Show("Sheet数据获取失败,原因:" + strMsg);
     39                             }
     40                         }
     41                     }
     42                 }
     43                 else if (fileType == ".xls")
     44                 {
     45                     // 2003版本
     46                     HSSFWorkbook workbook = new HSSFWorkbook(fs);
     47                     sheetNumber = workbook.NumberOfSheets;
     48                     for (int i = 0; i < sheetNumber; i++)
     49                     {
     50                         string sheetName = workbook.GetSheetName(i);
     51                         sheet = workbook.GetSheet(sheetName);
     52                         if (sheet != null)
     53                         {
     54                             dt = GetSheetDataTable(sheet,  strMsg);
     55                             if (dt != null)
     56                             {
     57                                 dt.TableName = sheetName.Trim();
     58                                 ds.Tables.Add(dt);
     59                             }
     60                             else
     61                             {
     62                                 MessageBox.Show("Sheet数据获取失败,原因:" + strMsg);
     63                             }
     64                         }
     65                     }
     66                 }
     67                 return ds;
     68             }
     69             catch (Exception ex)
     70             {
     71                 strMsg = ex.Message;
     72                 return null;
     73             }
     74         }
     75         /// <summary>
     76         /// 获取sheet表对应的DataTable
     77         /// </summary>
     78         /// <param name="sheet">Excel工作表</param>
     79         /// <param name="strMsg"></param>
     80         /// <returns></returns>
     81         private static DataTable GetSheetDataTable(ISheet sheet,  string strMsg)
     82         {
     83             strMsg = "";
     84             DataTable dt = new DataTable();
     85             string sheetName = sheet.SheetName;
     86             int startIndex = 0;// sheet.FirstRowNum;
     87             int lastIndex = sheet.LastRowNum;
     88             //最大列数
     89             int cellCount = 0;
     90             IRow maxRow = sheet.GetRow(0);
     91             for (int i = startIndex; i <= lastIndex; i++)
     92             {
     93                 IRow row = sheet.GetRow(i);
     94                 if (row != null && cellCount < row.LastCellNum)
     95                 {
     96                     cellCount = row.LastCellNum;
     97                     maxRow = row;
     98                 }
     99             }
    100             //列名设置
    101             try
    102             {
    103                 for (int i = 0; i < maxRow.LastCellNum; i++)//maxRow.FirstCellNum
    104                 {
    105                     dt.Columns.Add(Convert.ToChar(((int)'A') + i).ToString());
    106                     //DataColumn column = new DataColumn("Column" + (i + 1).ToString());
    107                     //dt.Columns.Add(column);
    108                 }
    109             }
    110             catch
    111             {
    112                 strMsg = "工作表" + sheetName + "中无数据";
    113                 return null;
    114             }
    115             //数据填充
    116             for (int i = startIndex; i <= lastIndex; i++)
    117             {
    118                 IRow row = sheet.GetRow(i);
    119                 DataRow drNew = dt.NewRow();
    120                 if (row != null)
    121                 {
    122                     for (int j = row.FirstCellNum; j < row.LastCellNum; ++j)
    123                     {
    124                         if (row.GetCell(j) != null)
    125                         {
    126                             ICell cell = row.GetCell(j);
    127                             switch (cell.CellType)
    128                             {
    129                                 case CellType.Blank:
    130                                     drNew[j] = "";
    131                                     break;
    132                                 case CellType.Numeric:
    133                                     short format = cell.CellStyle.DataFormat;
    134                                     //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理
    135                                     if (format == 14 || format == 31 || format == 57 || format == 58)
    136                                         drNew[j] = cell.DateCellValue;
    137                                     else
    138                                         drNew[j] = cell.NumericCellValue;
    139                                     if (cell.CellStyle.DataFormat == 177 || cell.CellStyle.DataFormat == 178 || cell.CellStyle.DataFormat == 188)
    140                                         drNew[j] = cell.NumericCellValue.ToString("#0.00");
    141                                     break;
    142                                 case CellType.String:
    143                                     drNew[j] = cell.StringCellValue;
    144                                     break;
    145                                 case CellType.Formula:
    146                                     try
    147                                     {
    148                                         drNew[j] = cell.NumericCellValue;
    149                                         if (cell.CellStyle.DataFormat == 177 || cell.CellStyle.DataFormat == 178 || cell.CellStyle.DataFormat == 188)
    150                                             drNew[j] = cell.NumericCellValue.ToString("#0.00");
    151                                     }
    152                                     catch
    153                                     {
    154                                         try
    155                                         {
    156                                             drNew[j] = cell.StringCellValue;
    157                                         }
    158                                         catch { }
    159                                     }
    160                                     break;
    161                                 default:
    162                                     drNew[j] = cell.StringCellValue;
    163                                     break;
    164                             }
    165                         }
    166                     }
    167                 }
    168                 dt.Rows.Add(drNew);
    169             }
    170             return dt;
    171         }
    172     }
  • 相关阅读:
    前端面试题及答案整理(一)
    关于提高网站性能的几点建议(二)
    关于提高网站性能的几点建议(一)
    基于ArcGIS JS API的在线专题地图实现
    关于婚姻的本质(转)
    14亿人的战争:中国人用了30年望见计算力的珠峰(转载)
    高效能人士的七个习惯--读书笔记
    乔布斯在斯坦福大学的演讲
    疫情加速医疗信息化行业景气上升,医疗信息化新黄金时代即将开启(转自公众号:先知研报)
    oracleXEUniv最大连接数修改
  • 原文地址:https://www.cnblogs.com/ZkbFighting/p/11236385.html
Copyright © 2011-2022 走看看