C#NPOI读取Excel

来源:互联网 发布:优学派软件下载 编辑:程序博客网 时间:2024/06/05 02:24
                /// <summary>/// 2007版Excel/// </summary>/// <param name="file"></param>/// <returns></returns>public static DataTable ExcelToTableForXLSX(string file){DataTable dt = new DataTable();using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)){NPOI.XSSF.UserModel.XSSFWorkbook xssfworkbook = new NPOI.XSSF.UserModel.XSSFWorkbook(fs);NPOI.SS.UserModel.ISheet sheet = xssfworkbook.GetSheetAt(0);//表头  NPOI.SS.UserModel.IRow header = sheet.GetRow(sheet.FirstRowNum);List<int> columns = new List<int>();for (int i = 0; i < header.LastCellNum; i++){object obj = GetValueTypeForXLSX(header.GetCell(i) as NPOI.XSSF.UserModel.XSSFCell);if (obj == null || obj.ToString() == string.Empty){dt.Columns.Add(new DataColumn("Columns" + i.ToString()));//continue;  }elsedt.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] = GetValueTypeForXLSX(sheet.GetRow(i).GetCell(j) as NPOI.XSSF.UserModel.XSSFCell);if (dr[j] != null && dr[j].ToString() != string.Empty){hasValue = true;}}if (hasValue){dt.Rows.Add(dr);}}}return dt;}/// <summary>  /// 获取单元格类型(xlsx)  /// </summary>  /// <param name="cell"></param>  /// <returns></returns>  private static object GetValueTypeForXLSX(XSSFCell 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;}}/// <summary>  /// 将Excel文件中的数据读出到DataTable中(xls)  /// </summary>  /// <param name="file"></param>  /// <returns></returns>  public static DataTable ExcelToTableForXLS(string file){DataTable dt = new DataTable();using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)){HSSFWorkbook hssfworkbook = new HSSFWorkbook(fs);ISheet sheet = hssfworkbook.GetSheetAt(0);//表头  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()));//continue;  }elsedt.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);}}}return dt;}/// <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;}}