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     }

猜你喜欢

转载自www.cnblogs.com/ZkbFighting/p/11236385.html