C#导入导出Excel数据的两种方法
发布时间 - 2026-01-11 00:17:32 点击率:次本文为大家分享了C#导入导出Excel数据的具体代码,供大家参考,具体内容如下

注:对于实体类对象最好新建一个并且继承原有实体类,这样可以将类型进行修改;
方法一:此种方法是用EPPLUS中的FileInfo流进行读取的(是不是流我还真不太了解,若有懂得请留言,非常感谢了)
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进行的操作,所以只能操作
//2007以后的版本以后的(即扩展名为.xlsx)
if (!filePath.Trim().EndsWith("xlsx"))
throw new Exception("请使用office Excel 2007版本或2010版本");
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
{
/// <summary> 打开文件 </summary>
bool Open();
//ExcelVersion Version { get; }
/// <summary> 文件路径 </summary>
string FilePath { get; set; }
/// <summary> 文件是否已经打开 </summary>
bool IfOpen { get; }
/// <summary> 文件包含工作表的数量 </summary>
int SheetCount { get; }
/// <summary> 当前工作表序号 </summary>
int CurrentSheetIndex { get; set; }
/// <summary> 获取当前工作表中行数 </summary>
int GetRowCount();
/// <summary> 获取当前工作表中列数 </summary>
int GetColumnCount();
/// <summary> 获取当前工作表中某一行中单元格的数量 </summary>
/// <param name="Row">行序号</param>
int GetCellCountInRow(int Row);
/// <summary> 获取当前工作表中某一单元格的值(按字符串返回) </summary>
/// <param name="Row">行序号</param>
/// <param name="Col">列序号</param>
string GetCellValue(int Row, int Col);
/// <summary> 关闭文件 </summary>
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<bool>(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 "";
}
}
/// <summary>
///将指定的Excel的文件转换成DataTable (Excel的第一个sheet)
/// </summary>
/// <param name="fullFielPath">文件的绝对路径</param>
/// <returns></returns>
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;
}
}
/// <summary>
/// 将worksheet转成datatable
/// </summary>
/// <param name="worksheet">待处理的worksheet</param>
/// <returns>返回处理后的datatable</returns>
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 <= rows; i++)
{
if (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));
//剩下的写入datatable
else
dr[j - 1] = GetString(worksheet.Cells[i, j].Value);
}
}
return dt;
}
}
}
之前我有一个程序用的是方法一进行Excel导入的,速度不是很快,后来我又用了第二种方法但是速度更慢了,到底这两种方法哪种快,请指导,还是我用第二种方法的时候业务判断有问题,不得而知,就请明白人指导我到底这两种方法哪种比较好些。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# C#导入导出Excel数据
# C#导入Excel数据
# C#导出Excel数据
# C# 导出Excel的6种简单方法实现
# C#导入导出EXCEL文件的代码实例
# C#的Excel导入、导出
# C#导出数据到Excel文件的方法
# C#自定义导出数据到Excel的类实例
# C#导出Excel的示例详解
# C#导出Excel的方法
# C#导出Excel的几种常见方式及详细实现步骤
# 单元格
# 种方法
# 行号
# 哪种
# 这两种
# 流进
# 的是
# 行数
# 器上
# 是在
# 我还
# 第一个
# 在此
# 不太
# 要有
# 我又
# 我用
# 用了
# 请使用
# 实体类
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在阿里云通过域名搭建网站?
Python文件操作最佳实践_稳定性说明【指导】
奇安信“盘古石”团队突破 iOS 26.1 提权
Android okhttputils现在进度显示实例代码
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
如何基于云服务器快速搭建网站及云盘系统?
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
Windows Hello人脸识别突然无法使用
香港服务器网站卡顿?如何解决网络延迟与负载问题?
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
JavaScript模板引擎Template.js使用详解
中山网站推广排名,中山信息港登录入口?
Laravel怎么连接多个数据库_Laravel多数据库连接配置
如何快速搭建二级域名独立网站?
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
WordPress 子目录安装中正确处理脚本路径的完整指南
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
Laravel如何使用Blade组件和插槽?(Component代码示例)
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
米侠浏览器网页背景异常怎么办 米侠显示修复
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
Laravel怎么上传文件_Laravel图片上传及存储配置
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
智能起名网站制作软件有哪些,制作logo的软件?
Bootstrap整体框架之JavaScript插件架构
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
如何在搬瓦工VPS快速搭建网站?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
如何快速查询网址的建站时间与历史轨迹?
使用豆包 AI 辅助进行简单网页 HTML 结构设计
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
Python并发异常传播_错误处理解析【教程】
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
如何用低价快速搭建高质量网站?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
Bootstrap整体框架之CSS12栅格系统
Laravel中的Facade(门面)到底是什么原理
网站制作报价单模板图片,小松挖机官方网站报价?
手机网站制作与建设方案,手机网站如何建设?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
网站制作企业,网站的banner和导航栏是指什么?
利用 Google AI 进行 YouTube 视频 SEO 描述优化
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
Swift中swift中的switch 语句
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
如何在 Pandas 中基于一列条件计算另一列的分组均值

