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

2019-12-30 11:04:22王冬梅
  • oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong);  //将数据读入到DataTable中——Start  
  • sheets = workbook.Worksheets;  Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);//读取第一张表 
  • if (worksheet == null)  return null; 
  • string cellContent;  int iRowCount = worksheet.UsedRange.Rows.Count; 
  • int iColCount = worksheet.UsedRange.Columns.Count;  Excel.Range range; 
  • //负责列头Start  DataColumn dc; 
  • int ColumnID = 1;  range = (Excel.Range)worksheet.Cells[1, 1]; 
  • while (iColCount >= ColumnID)  { 
  • dc = new DataColumn();  dc.DataType = System.Type.GetType("System.String"); 
  • string strNewColumnName = range.Text.ToString().Trim();  if (strNewColumnName.Length == 0) strNewColumnName = "_1"; 
  • //判断列名是否重复  for (int i = 1; i < ColumnID; i++) 
  • {  if (dt.Columns[i - 1].ColumnName == strNewColumnName) 
  • strNewColumnName = strNewColumnName + "_1";  } 
  • dc.ColumnName = strNewColumnName;  dt.Columns.Add(dc); 
  • range = (Excel.Range)worksheet.Cells[1, ++ColumnID];  } 
  • //End  //数据大于500条,使用多进程进行读取数据 
  • if (iRowCount - 1 > 500)  { 
  • //开始多线程读取数据  //新建线程 
  • int b2 = (iRowCount - 1) / 10;  DataTable dt1 = new DataTable("dt1"); 
  • dt1 = dt.Clone();  SheetOptions sheet1thread = new SheetOptions(worksheet, iColCount, 2, b2 + 1, dt1); 
  • Thread othread1 = new Thread(new ThreadStart(sheet1thread.SheetToDataTable));  othread1.Start(); 
  • //阻塞 1 毫秒,保证第一个读取 dt1  Thread.Sleep(1); 
  • DataTable dt2 = new DataTable("dt2");  dt2 = dt.Clone();