C#读取Excel数据的几种方式(包含大量数据读取)

  • C#读取Excel数据的几种方式(包含大量数据读取)

    • OleDB方式
    • COM组件的方式
    • NPOI方式读取(此处未测试,参考其他博文)

常用的Excel数据读取方式有三种:

OleDB方式

  • 这种方式需要安装AccessDatabaseEngine,实际上就是一种利用ACCESS数据库的方式读取数据至DataTable。下载链接
  • 这种方法使用简单,读取速度快,尤其适合小批量数据读取。WHC.OrderWater.Commons中有完成的操作封装,日常使用足矣。下载链接
  • 缺点是当数据量非常大时(比如超过2w行),会非常占用内存,甚至可能存在内存溢出的异常,需要使用其他方式。
public static DataSet ExcelToDataSet(string excelPath, bool header, ExcelType eType)
{string connectstring = GetExcelConnectstring(excelPath, header, eType);return ExcelToDataSet(connectstring);
}public static DataSet ExcelToDataSet(string connectstring)
{using (OleDbConnection conn = new OleDbConnection(connectstring)){DataSet ds = new DataSet();List<string> tableNames = GetExcelTablesName(conn);foreach (string tableName in tableNames){OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [" + tableName + "]", conn);adapter.Fill(ds, tableName);}return ds;}
}

COM组件的方式

  • 这种方式需要添加Microsoft.Office.Interp.Excel引用,可用NuGet安装引用。
  • 优点是能够非常灵活的读取Excel中的数据,还可以灵活调用各种函数。如果通过WorkSheet.Range()方式读取可以极大地提升读取速度,适用于批量数据读取。
  • 缺点是需要后台打开Excel,数据量较小时读取速度优势不明显。
/// <summary>
/// 读取Excel中某一范围的数据
/// </summary>
/// <param name="excelPath">待读取的Excel文件路径</param>
/// <param name="stCell">起始单元格编号</param>
/// <param name="edCell">终止单元格编号</param>
/// <returns>存放连续读取的数据的二维数组</returns>
public static object[,] GetExcelRangeData(string excelPath, string stCell, string edCell)
{Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();Workbook workBook = null;object oMissiong = Missing.Value;try{workBook = app.Workbooks.Open(excelPath, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong,oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong);if (workBook == null)return null;Worksheet workSheet = (Worksheet) workBook.Worksheets.Item[1];//使用下述语句可以从头读取到最后,按需使用//var maxN = workSheet.Range[startCell].End[XlDirection.xlDown].Row;return workSheet.Range[stCell + ":" + edCell].Value2;}catch (Exception e){return null;}finally{//COM组件方式调用完记得释放资源if (workBook != null){workBook.Close(false, oMissiong, oMissiong);Marshal.ReleaseComObject(workBook);app.Workbooks.Close();app.Quit();Marshal.ReleaseComObject(app);}}
}//随便写的一个调用案例
public static List<Edge> ReadAllEdgesFromFile()
{List<Edge> lstEdges = new List<Edge>();object[,] data = ExcelHelper.GetExcelRangeData(FilePath, "A1", "C82412");int length = data.GetLength(0);//注意这里是从1开始的,调试的时候才发现for (int i = 1; i <= length; i++){Edge edge = new Edge();//注意这里是从1开始的,调试的时候才发现edge.EdgeID = Convert.ToInt32(data[i, 1]);edge.EdgeStartIndex = Convert.ToInt32(data[i, 2]);edge.EdgeEndIndex = Convert.ToInt32(data[i, 3]);edge.StSelected = false;edge.EdSelected = false;lstEdges.Add(edge);}return lstEdges;
}

NPOI方式读取(此处未测试,参考其他博文)

  • NPOI是POI项目的.NET版本,用于读写Excel/Word等微软OLE2组件文档。
  • 优点是读取Excel速度较快,读取方式灵活。
  • 缺点是需要下载相关插件。
  • 此处代码请参考以下博文链接:C#读取Excel的三种方式以及比较

C#读取Excel数据的几种方式(包含大量数据读取)相关推荐

  1. Spark读取Hive数据的两种方式与保存数据到HDFS

    Spark读取Hive数据的两种方式与保存数据到HDFS Spark读取Hive数据的方式主要有两种 1. 通过访问hive metastore的方式,这种方式通过访问hive的metastore元数 ...

  2. 【Java基础】IO流概述分类、字节流写数据、字节流写数据的三种方式及写数据的两个小问题

    目录 一.IO流概述和分类 二.字节流写数据 三.字节流写数据的三种方式 四.字节流写数据的两个小问题 一.IO流概述和分类 IO流介绍: ● IO:输入/输出(Input/Output) ● 流:是 ...

  3. mysql数据库导入数据的几种方式

    mysql数据库导入数据的几种方式 适用于大量数据的导入 一.excel方式导入 1.将需要的数据放到表格中,需要注意表格中的列必须与要导入的表保持一致 2.导入步骤 二.csv文件导入 1.一般拿到 ...

  4. php怎么读取txt文件_PHP读取文件内容的五种方式

    php读取文件内容的五种方式 分享下php读取文件内容的五种方法:好吧,写完后发现文件全部没有关闭.实际应用当中,请注意关闭 fclose($fp); -- php读取文件内容: -----第一种方法 ...

  5. Servlet获取Excel中数据的两种方式

    Servlet解析Excel文件的两种方式 简单分享一下Servlet通过解析Excel文件得到其中数据的两种方式 第一种:前端获取 思路:通过layui的第三方插件 layui.excel 解析ex ...

  6. python读取图像数据流_浅谈TensorFlow中读取图像数据的三种方式

    本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和TFRecorder读取方式.并且还补充了功能相近的tf函数. 1.处理单张图片 我们训练完模型之后,常常要用图片 ...

  7. 第四章:数据存储-csv文件处理-读取csv文件的两种方式

    直接学习:https://edu.csdn.net/course/play/24756/280718 csv文件处理-读取csv文件的两种方式: # 这种方式读取到的每一条数据是个列表,所以需要通过下 ...

  8. ios网络学习------4 UIWebView的加载本地数据的三种方式

    ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...

  9. C# 三种方式实现Socket数据接收(经典)

    Stream.Read 方法 当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数. 语法: public abstract int Read(byte[] buffer, in ...

最新文章

  1. reactNative 打包那些事儿
  2. 牛客16662 津津的储蓄计划
  3. 设计模式——解释器模式
  4. demo10 关于JS Tree Shaking
  5. MATLAB | 怎样拥有精致的圆角半透明图例?
  6. Swift iOS HealthKit 使用案例: 获取体温列表 HKHealthStore
  7. java 输入输出_java基本输入输出小结
  8. 关于C语言数组的输入与输出
  9. python django企业固定资产管理系统pycharm项目源码lw
  10. 《商业银行会计》--概述
  11. html 滑动刻度尺,js实现移动端H5页面手指滑动刻度尺功能
  12. ECharts之类型3D(map,bar3D,scatter3D)
  13. pygame-KidsCanCode系列jumpy-part8-记录历史最高分
  14. CSDN什么时候倒闭啊
  15. 从表征到行动---意向性的自然主义进路(续八)
  16. 减少系统的停顿时间(STW)的增量收集算法 和分区算法
  17. 可视化大屏原型图解决方案附axure可视化组件库
  18. 免费强大的H5前端打印控件
  19. android spinner自定义样式,android自定义Spinner下拉菜单(下拉列表框)样式
  20. 杭州计算机学校每日消费,杭州计算机学校的核心专业--年薪几十万的专业

热门文章

  1. 网络营销为传统零售企业增效
  2. 【HTML】HTML5网页作业----模仿京东,模仿站点
  3. 股票交易问题全拿下,一扫光
  4. 蔚小理能再次绝地重生吗(中)
  5. 值得销售人员看的书籍
  6. 台式计算机风扇润滑油,电脑CPU风扇,显卡风扇千万不要加缝纫机油或机油
  7. MySQL 5.7.26部署及授权,主从配置
  8. 微信小程序源码删除解决办法解包
  9. MySQL编码格式统一为UTF8
  10. cp强制覆盖与不覆盖拷贝方法