C#读取Excel的三种方式以及比较分析

2019-12-30 11:04:22王冬梅

缺点:需要下载相应的插件并添加到系统引用当中。

 

 
  1. /// <summary>  /// 将excel中的数据导入到DataTable中 
  2. /// </summary>  /// <param name="sheetName">excel工作薄sheet的名称</param> 
  3. /// <param name="isFirstRowColumn">第一行是否是DataTable的列名</param>  /// <returns>返回的DataTable</returns> 
  4. public DataTable ExcelToDataTable(string sheetName, bool isFirstRowColumn)  { 
  5. ISheet sheet = null;  DataTable data = new DataTable(); 
  6. int startRow = 0;  try 
  7. {  fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); 
  8. if (fileName.IndexOf(".xlsx") > 0) // 2007版本  workbook = new XSSFWorkbook(fs); 
  9. else if (fileName.IndexOf(".xls") > 0) // 2003版本  workbook = new HSSFWorkbook(fs); 
  10. if (sheetName != null)  { 
  11. sheet = workbook.GetSheet(sheetName);  } 
  12. else  { 
  13. sheet = workbook.GetSheetAt(0);  } 
  14. if (sheet != null)  { 
  15. IRow firstRow = sheet.GetRow(0);  int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数 
  16. if (isFirstRowColumn)  { 
  17. for (int i = firstRow.FirstCellNum; i < cellCount; ++i)  { 
  18. DataColumn column = new DataColumn(firstRow.GetCell(i).StringCellValue);  data.Columns.Add(column); 
  19. }  startRow = sheet.FirstRowNum + 1; 
  20. }  else 
  21. {  startRow = sheet.FirstRowNum; 
  22. }  //最后一列的标号 
  23. int rowCount = sheet.LastRowNum;  for (int i = startRow; i <= rowCount; ++i) 
  24. {  IRow row = sheet.GetRow(i); 
  25. if (row == null) continue; //没有数据的行默认是null