C#IO之导入导出Excel的多种方式

一.基本介绍:
今天给大家带来的是Excel导入导出的多种实现方式,以及他们的各自的优势以及劣势,首先第一种方式是使用Office组件的方式 ,第二种方式是使用OleDb以及StreamWriter进行Excel的导入导出,第三中方式是使用NPIO进行Excel的导入导出。
二.第一种方式:使用Office组件进行导入导出
导入:

   public void ioExcel() {DataTable dt = new DataTable();string fileName = @"d:\测试.xlsx";APExcel.Application exApp = new APExcel.Application(); //excel应用APExcel.Workbooks wbs = exApp.Workbooks; //Excel的工作簿集合APExcel._Workbook _wbk = null;   //excel的一个工作簿文件try{//打开一个已有的Excel的文件_wbk = wbs.Add(fileName);APExcel.Worksheet sheet = _wbk.Sheets["sheet1"];int rowCounts = sheet.UsedRange.Rows.Count;int columnsCounts = sheet.UsedRange.Columns.Count;//获取列Excel工作表的第一列为列名,索引从1开始for (int i = 1; i <= columnsCounts; i++){dt.Columns.Add(((APExcel.Range)sheet.Cells[1, i]).Value());}for (int i = 2; i <= rowCounts; i++){DataRow dr = dt.NewRow();for (int j = 1; j <= columnsCounts; j++){dr[j - 1] = ((APExcel.Range)sheet.Cells[i, j]).Value();}dt.Rows.Add(dr);}}catch (Exception e){//记录日志}finally {_wbk.Close();wbs.Close();exApp.Quit();}

导出:

        public void OutputExcel(DataTable Data){APExcel.Application exApp = new APExcel.Application(); //excel应用APExcel.Workbooks wbs = exApp.Workbooks; //Excel的工作簿集合APExcel._Workbook _wbk = null;   //excel的一个工作簿文件try{_wbk = wbs.Add(true);  //新建一个Excel工作簿文件//取得第一个工作表APExcel.Worksheet sheet = _wbk.Sheets[1];sheet.Name = "测试数据";//第一行:写入列名for (int i = 0; i < Data.Columns.Count; i++){APExcel.Range r = sheet.Cells[1, i + 1];r.Value = Data.Columns[i].ColumnName;}for (int i = 0; i < Data.Rows.Count; i++){for (int j = 0; j < Data.Columns.Count; j++){APExcel.Range r = sheet.Cells[i + 2, j + 1];r.Value = Data.Rows[i][j].ToString();}}exApp.DisplayAlerts = false;_wbk.Saved = true;_wbk.SaveCopyAs(@"d:\\测试数据11.xlsx");}catch (Exception E){//}finally{_wbk.Close();wbs.Close();exApp.Quit();}}

缺点:
速度慢,问题多,效率低-----废弃
三.第二种方式:OleDb导入,StreamWriter进行导出写入Excel

导入:

   public void InPutExcel(string FileName){string extensionName = Path.GetExtension(FileName);string strCon = null;if (extensionName == ".xls"){strCon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties='Excel8.0;HDR=YES;IMEX=1'";}else{strCon = @"Provider=Microsoft.Jet.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties='Excel12.0;HDR=YES;IMEX=1'";}//OLEDB 是建立在ODBC功能之上的开发规范,ODBC是为了访问关系型数据库进行而专门开发的而OLEDB是用于访问关系型和非关系型数据源//整体过程相当于连接数据库访问数据表的过程DataTable dt = new DataTable();using (OleDbConnection conn = new OleDbConnection(strCon)){conn.Open();DataTable dtNames = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });string shName = dtNames.Rows[0][2].ToString();string sql = $"select * from {shName}";OleDbDataAdapter da = new OleDbDataAdapter(sql, strCon);da.Fill(dt);}}

导出:

  public void OutPutExcel(DataTable data){string path = @"d:\测试数据.xlsx";StreamWriter sw = new StreamWriter(path, false, Encoding.UTF8);StringBuilder sb = new StringBuilder();for (int i = 0; i < data.Columns.Count; i++){sb.Append(data.Columns[i].ColumnName + "\t");//相当于tab不能省略}sb.Append(Environment.NewLine);for (int i = 0; i < data.Rows.Count; i++){for (int j = 0; j < data.Columns.Count; j++){sb.Append(data.Rows[i + 1][j].ToString() + "\t");}sb.Append(Environment.NewLine);}sw.Write(sb);sw.Flush();   //将数据从暂存区刷到基础存储设备   落库}

优缺点:
优点:加载速度比较快
缺点:受版本的限制,不同的版本链接字符串不一样
四.使用NPIO进行Excel的导入导出
优势:

导入:

 public void InputExcel(string sheetName){DataTable dt = new DataTable();string fileName = @"d:\测试数据.xlsx";bool isColumnName = true;IWorkbook workbook;ISheet sheet = null;string Ext = Path.GetExtension(fileName).ToLower();using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Read)){if (Ext == ".xls"){workbook = new HSSFWorkbook(fs);}else if (Ext == ".xlsx"){workbook = new HSSFWorkbook(fs);}else{workbook = null;}}if (string.IsNullOrEmpty(sheetName)){sheet = workbook.GetSheet(sheetName);if (sheet == null){workbook.GetSheetAt(0);}}else{workbook.GetSheetAt(0);}//获取表头 FirstRowNum  第一行索引0IRow header = sheet.GetRow(sheet.FirstRowNum);int StartRow = 0; //数据的第一行索引if (isColumnName){//表示第一行是列名的信息 StartRow = sheet.FirstRowNum + 1;for (int i = header.FirstCellNum; i < header.LastCellNum; i++){//获取指定索引的单元格ICell cell = header.GetCell(i);if (cell != null) {//获取指定的列名string cellValue=cell.ToString();if (cellValue != null){DataColumn dc = new DataColumn(cellValue);dt.Columns.Add(dc);}else {DataColumn dc = new DataColumn(cellValue);dt.Columns.Add(dc);}}}//数据 LastRowNum 最后一行的索引如第九行的索引---8for (int i = StartRow; i < sheet.LastRowNum; i++) {IRow row = sheet.GetRow(i);if (row == null) {continue;}DataRow dr = dt.NewRow();//遍历每行的单元格for (int j = row.FirstCellNum; j < row.LastCellNum; j++) {if (row.GetCell(j) != null) {dr[j] = row.GetCell(j).ToString();}}dt.Rows.Add(dr);}     }}

导出:

public void OutPutExcel(DataTable data){string sheetName = "测试数据";//创建一个工作簿对象IWorkbook workBook = new HSSFWorkbook();//创建一个工作表的实例ISheet sheet = string.IsNullOrEmpty(sheetName) ? workBook.GetSheet("sheet1") : workBook.GetSheet(sheetName);int rowIndex = 0;if (data.Columns.Count > 0){IRow header = sheet.GetRow(rowIndex); //创建第一行//设置列名for (int i = 0; i < data.Columns.Count; i++){ICell cell = header.CreateCell(i); //创建单元格cell.SetCellValue(data.Columns[i].ColumnName);//设置单元格的值}}//添加数据if (data.Rows.Count > 0){for (int i = 0; i < data.Rows.Count; i++){rowIndex++;IRow row = sheet.GetRow(rowIndex);for (int j = 0; j < data.Columns.Count; j++){ICell cell = row.CreateCell(j);//创建单元格cell.SetCellValue(data.Rows[i][j].ToString()); //设置值}}}for (int i = 0; i < data.Rows.Count; i++){sheet.AutoSizeColumn(i);}using (FileStream fs = new FileStream(@"d:\测试数据11.xlsx", FileMode.Create, FileAccess.Write)){workBook.Write(fs);   //写入指定的路径 创建excel文件}}

总结:
我们介绍了目前主要使用的几种进行Excel的导入导出的方式,并且进行他们使用的简单的举例子,目前我们使用最为广泛的Excel,Word的操作,使用的还是NPOI的方式,我们也进行了NPOI的基本介绍列举了他的优点,前两种方式可以作为了解进行学习,主要是掌握最后一种方法即可。

C#IO之导入导出Excel的多种方式相关推荐

  1. java io导出excel表格_Java IO 导入导出Excel表格

    1.将excel导入到内存 1. 调用工作簿Workbook的静态方法getWorkbook(),获得工作簿Workbook对象 InputStream in = new FileInputStrea ...

  2. java excel data 导入数据_java实现导入导出excel数据

    项目需要,要实现一个导入导出excel的功能,于是,任务驱动着我学习到了POI和JXL这2个java操作Excel的插件. 一.POI和JXL介绍 1.POI:是对所有office资源进行读写的一套工 ...

  3. 让 .Net 更方便的导入导出 Excel

    让 .Net 更方便的导入导出Excel Intro 因为前一段时间需要处理一些 excel 数据,主要是导入/导出操作,将 Excel 数据转化为对象再用程序进行处理和分析,没有找到比较满意的库,于 ...

  4. jxl导入/导出excel(网上的案例)

    假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情 ...

  5. vue 导入excel插件_Vue框架下实现导入导出Excel、导出PDF

    项目需求:开发一套基于Vue框架的工程档案管理系统,用于工程项目资料的填写.编辑和归档,经调研需支持如下功能: Excel报表的导入.导出 PDF文件的导出 打印表格 经过技术选型,项目组一致决定通过 ...

  6. 使用EasyPoi导入导出Excel

    easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言( ...

  7. 使用easypoi导入导出excel,SSM和SpringBoot通用代码

    easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板语言(熟悉 ...

  8. java 导入excel工具类_java Excel工具类,导入导出Excel数据

    java Excel工具类,导入导出Excel数据,导入数据对合并表格有判断获取数据: 导出数据到Excel,Excel文件不存在会创建. 使用的是poi处理,兼容Excel. 对反射不够理解,目前先 ...

  9. csv和excel php 解析_PHP 高效导入导出Excel(csv)方法之fgetcsv()和fputcsv()函数

    CSV,是Comma Separated Value(逗号分隔值)的英文缩写,通常都是纯文本文件. 一.CSV数据导入函数fgetcsv() fgetcsv() 函数从文件指针中读入一行并解析 CSV ...

最新文章

  1. python安装包_Python开发环境搭建
  2. python超神之路:Python3 列表list合并的4种方法
  3. ConcurrentModificationException异常解决办法
  4. RHEL/CentOS下编译安装Nginx
  5. 转mjpeg协议到httpflv
  6. linux mysql 定时任务_Linux下Mysql定时任务备份数据的实现方法
  7. 卸载java_Java面试必备——类的加载过程
  8. python之join()用法
  9. SQL Server2005完全版与精简版的一个差别(抄录)
  10. 基于C++和QT实现的房贷计算器设计
  11. 22岁少年破解史上最严重网络攻击,拯救全球互联网,三个月后却被FBI逮捕……
  12. 基于qiankun.js的微前端应用实战
  13. phpstorm安装jquery插件库
  14. 用故事讲清楚统计学的Confidence Interval(置信区间)and Hypothesis Test
  15. xxljob实战总结
  16. 【SVN】win10下SVN图标不显示
  17. Python爬取高质量电脑壁纸,还是很好看的
  18. Firefox火狐浏览器如何屏蔽CSDN页面上的广告(亲测有效!)
  19. 2022-2028全球与中国卫生洁具市场现状及未来发展趋势
  20. 学习Linux命令(41)

热门文章

  1. 悦刻母公司雾芯季报图解:营收10.4亿同比降38% 净利5亿
  2. 第三章 SLO工程案例学习
  3. java实现第二届蓝桥杯异或加密法
  4. mybatis--动态语句查询
  5. 网络安全--信息收集
  6. 28个墨迹photoshop笔刷
  7. js调用了app爆露的方法导致app闪退
  8. 3D飞镖游戏源码ios版
  9. 文字到底应该如何雕琢
  10. Threejs中 Blender建模的问题 ------ uv贴图中修改贴图的方向和uv贴图材质重复不起作用