1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C#实现导入导出Excel数据的两种方法详解

C#实现导入导出Excel数据的两种方法详解

时间:2020-02-05 12:20:52

相关推荐

C#实现导入导出Excel数据的两种方法详解

后端开发|C#.Net教程

C#,Excel,导入导出

后端开发-C#.Net教程

这篇文章主要为大家详细介绍了C#导入导出Excel数据的两种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

上传微信小程序源码,vscode图形化界面,ubuntu 保存重启,tomcat不是内部指令,爬虫异步编程,php 转 ios,外贸seo光算科技.简介,discuz怎么将代码添加至网站全部页面的标签前,织梦模板手机版生成静态lzw

注:对于实体类对象最好新建一个并且继承原有实体类,这样可以将类型进行修改;

菠菜网站源码二次开发,如何在vscode运行xml,ubuntu美化win,tomcat配置中级证书,node 爬虫 登录,php 正则删除a标签,贵州seo优化哪家靠谱,织梦 网站栏目管理,回忆网站模板lzw

方法一:此种方法是用EPPLUS中的FileInfo流进行读取的(是不是流我还真不太了解,若有懂得请留言,非常感谢了)

比赛评分系统源码,ubuntu移除上网拨号,把工程用tomcat运行吗,爬虫 文本框,php gd库生成验证码,政和seo推广lzw

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Abp.Extensions;namespace HYZT.Ltxy.International.Ctrip.Exporting{ public class ExcelLib { public ICtripPolicyExcelImport GetExcel(string filePath) { if (filePath.Trim() .IsNullOrEmpty()) throw new Exception("文件名不能为空"); //因为这儿用得是EPPLUS对Excel进行的操作,所以只能操作 //以后的版本以后的(即扩展名为.xlsx) if (!filePath.Trim().EndsWith("xlsx")) throw new Exception("请使用office Excel 版本或版本"); else if (filePath.Trim().EndsWith("xlsx")) { ICtripPolicyExcelImport res = new CtripPolicyExcelImport(filePath.Trim()); return res; } else return null; } }}

方法接口:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace HYZT.Ltxy.International.Ctrip.Exporting{ public interface ICtripPolicyExcelImport { /// bool Open(); //ExcelVersion Version { get; } /// string FilePath { get; set; } /// bool IfOpen { get; } /// int SheetCount { get; } /// int CurrentSheetIndex { get; set; } /// int GetRowCount(); /// int GetColumnCount(); /// /// 行序号 int GetCellCountInRow(int Row); /// /// 行序号 /// 列序号 string GetCellValue(int Row, int Col); /// void Close(); }}

方法实现:

using OfficeOpenXml;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;namespace HYZT.Ltxy.International.Ctrip.Exporting{ public class CtripPolicyExcelImport:ICtripPolicyExcelImport { public CtripPolicyExcelImport() { } public CtripPolicyExcelImport(string path) { filePath = path; } private string filePath = ""; private ExcelWorkbook book = null; private int sheetCount = 0; private bool ifOpen = false; private int currentSheetIndex = 0; private ExcelWorksheet currentSheet = null; private ExcelPackage ep = null;public bool Open() { try {ep = new ExcelPackage(new FileInfo(filePath));if (ep == null) return false;book =ep.Workbook;sheetCount = book.Worksheets.Count;currentSheetIndex = 0;currentSheet = book.Worksheets[1];ifOpen = true; } catch (Exception ex) {throw new Exception(ex.Message); } return true; } public void Close() { if (!ifOpen || ep == null) return; ep.Dispose(); } //public ExcelVersion Version //{ get { return ExcelVersion.Excel07; } } public string FilePath { get { return filePath; } set { filePath = value; } } public bool IfOpen { get { return ifOpen; } } public int SheetCount { get { return sheetCount; } } public int CurrentSheetIndex { get { return currentSheetIndex; } set {if (value != currentSheetIndex){if (value >= sheetCount) throw new Exception("工作表序号超出范围");currentSheetIndex = value;currentSheet =book.Worksheets[currentSheetIndex+1];} } } public int GetRowCount() { if (currentSheet == null) return 0; return currentSheet.Dimension.End.Row; } public int GetColumnCount() { if (currentSheet == null) return 0; return currentSheet.Dimension.End.Column; } public int GetCellCountInRow(int Row) { if (currentSheet == null) return 0; if (Row >= currentSheet.Dimension.End.Row) return 0; return currentSheet.Dimension.End.Column; } //根据行号和列号获取指定单元格的数据 public string GetCellValue(int Row, int Col) { if (currentSheet == null) return ""; if (Row >= currentSheet.Dimension.End.Row || Col >= currentSheet.Dimension.End.Column) return ""; object tmpO =currentSheet.GetValue(Row+1, Col+1); if (tmpO == null) return ""; return tmpO.ToString(); } } }

方法调用实现功能:

//用于程序是在本地,所以此时的路径是本地电脑的绝对路劲;//当程序发布后此路径应该是服务器上的绝对路径,所以在此之前还要有//一项功能是将本地文件上传到服务器上的指定位置,此时在获取路径即可 public string GetExcelToCtripPolicy(string filePath) { ExcelLib lib = new ExcelLib(); if (filePath == null) return new ReturnResult(false, "未找到相应文件"); string str= tmp.GetCellValue(i, j); return str; }

方法二:将Excel表格转化成DataTable表,然后在对DataTable进行业务操作

using Abp.Application.Services;using OfficeOpenXml;using System;using System.Collections.Generic;using System.Data;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;namespace HYZT.Ltxy.International.Ctrip.GetExcelToDataTable{ public class EPPlusHelperAppService:ApplicationService,IEPPlusHelperAppService { private static string GetString(object obj) { try { return obj.ToString(); } catch (Exception ex) { return ""; } } /// /// 文件的绝对路径 /// public DataTable WorksheetToTable(string filePath) { try { FileInfo existingFile = new FileInfo(filePath); ExcelPackage package = new ExcelPackage(existingFile); ExcelWorksheet worksheet = package.Workbook.Worksheets[1];//选定 指定页 return WorksheetToTable(worksheet); } catch (Exception) { throw; } } /// /// 待处理的worksheet /// 返回处理后的datatable public static DataTable WorksheetToTable(ExcelWorksheet worksheet) { //获取worksheet的行数 int rows = worksheet.Dimension.End.Row; //获取worksheet的列数 int cols = worksheet.Dimension.End.Column; DataTable dt = new DataTable(worksheet.Name); DataRow dr = null; for (int i = 1; i 1)dr = dt.Rows.Add(); for (int j = 1; j <= cols; j++) {//默认将第一行设置为datatable的标题if (i == 1)dt.Columns.Add(GetString(worksheet.Cells[i, j].Value));//剩下的写入datatableelsedr[j - 1] = GetString(worksheet.Cells[i, j].Value); } } return dt; } }}

之前我有一个程序用的是方法一进行Excel导入的,速度不是很快,后来我又用了第二种方法但是速度更慢了,到底这两种方法哪种快,请指导,还是我用第二种方法的时候业务判断有问题,不得而知,就请明白人指导我到底这两种方法哪种比较好些。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。