c# NPOI 方式读取 EXCEL表 类
Posted eliza209
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# NPOI 方式读取 EXCEL表 类相关的知识,希望对你有一定的参考价值。
参考链接:https://www.cnblogs.com/chunxiong/p/9406178.html
稍微修改了一下。。。学习学习!!
namespace NPOIClass public class NPOIC private static int sheetCellNumMax = 12; /// <summary> /// 获取sheet表名 /// </summary> /// <param name="filePath"></param> /// <returns></returns> public static string[] GetSheetName(string filePath) int sheetNumber = 0; var file = new FileStream(filePath, FileMode.Open, FileAccess.Read); if (filePath.IndexOf(".xlsx") > 0) //2007版本 var xssfworkbook = new XSSFWorkbook(file); sheetNumber = xssfworkbook.NumberOfSheets; string[] sheetNames = new string[sheetNumber]; for (int i = 0; i < sheetNumber; i++) sheetNames[i] = xssfworkbook.GetSheetName(i); return sheetNames; else if (filePath.IndexOf(".xls") > 0) //2003版本 var hssfworkbook = new HSSFWorkbook(file); sheetNumber = hssfworkbook.NumberOfSheets; string[] sheetNames = new string[sheetNumber]; for (int i = 0; i < sheetNumber; i++) sheetNames[i] = hssfworkbook.GetSheetName(i); return sheetNames; return null; /// <summary> /// 根据表名获取表 /// </summary> /// <param name="filePath"></param> /// <param name="sheetName"></param> /// <returns></returns> public static DataTable ExcelToDataTable(string filePath, string sheetName) string outMsg = ""; var dt = new DataTable(); string fileType = Path.GetExtension(filePath).ToLower(); try ISheet sheet = null; FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); if (fileType == ".xlsx") //2007版 XSSFWorkbook workbook = new XSSFWorkbook(fs); sheet = workbook.GetSheet(sheetName); if (sheet != null) dt = GetSheetDataTable(sheet, out outMsg); else if (fileType == ".xls") //2003版 HSSFWorkbook workbook = new HSSFWorkbook(fs); sheet = workbook.GetSheet(sheetName); if (sheet != null) dt = GetSheetDataTable(sheet, out outMsg); catch (Exception e) Console.WriteLine(e.Message); return dt; /// <summary> /// 获取sheet表对应的DataTable /// </summary> /// <param name="sheet">Excel工作表</param> /// <param name="strMsg"></param> /// <returns></returns> private static DataTable GetSheetDataTable(ISheet sheet, out string strMsg) strMsg = ""; DataTable dt = new DataTable(); string sheetName = sheet.SheetName; int startIndex = 0;// sheet.FirstRowNum; int lastIndex = sheet.LastRowNum; //最大列数 int cellCount = 0; IRow maxRow = sheet.GetRow(0); for (int i = startIndex; i <= lastIndex; i++) IRow row = sheet.GetRow(i); if (row != null && cellCount < row.LastCellNum) cellCount = row.LastCellNum; maxRow = row; //列名设置 try //maxRow.LastCellNum = 12 // L for (int i = 0; i < sheetCellNumMax; i++)//maxRow.FirstCellNum dt.Columns.Add(Convert.ToChar(((int)‘A‘) + i).ToString()); //DataColumn column = new DataColumn("Column" + (i + 1).ToString()); //dt.Columns.Add(column); catch strMsg = "工作表" + sheetName + "中无数据"; return null; //数据填充 for (int i = startIndex; i <= lastIndex; i++) IRow row = sheet.GetRow(i); DataRow drNew = dt.NewRow(); if (row != null) for (int j = row.FirstCellNum; j < row.LastCellNum; ++j) if (row.GetCell(j) != null) ICell cell = row.GetCell(j); switch (cell.CellType) case CellType.Blank: drNew[j] = ""; break; case CellType.Numeric: short format = cell.CellStyle.DataFormat; //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理 if (format == 14 || format == 31 || format == 57 || format == 58) drNew[j] = cell.DateCellValue; else drNew[j] = cell.NumericCellValue; if (cell.CellStyle.DataFormat == 177 || cell.CellStyle.DataFormat == 178 || cell.CellStyle.DataFormat == 188) drNew[j] = cell.NumericCellValue.ToString("#0.00"); break; case CellType.String: drNew[j] = cell.StringCellValue; break; case CellType.Formula: try drNew[j] = cell.NumericCellValue; if (cell.CellStyle.DataFormat == 177 || cell.CellStyle.DataFormat == 178 || cell.CellStyle.DataFormat == 188) drNew[j] = cell.NumericCellValue.ToString("#0.00"); catch try drNew[j] = cell.StringCellValue; catch break; default: drNew[j] = cell.StringCellValue; break; dt.Rows.Add(drNew); return dt;
以上是关于c# NPOI 方式读取 EXCEL表 类的主要内容,如果未能解决你的问题,请参考以下文章