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

下面是详细讲解“C#读取Excel的三种方式以及比较分析”的完整攻略。

背景

C#是微软推出的一门基于.NET Framework的编程语言,是广泛使用的企业级编程语言之一。而Excel是改善我们日常工作中的一大利器。

在实际的应用过程中,C#读取Excel文件的需求非常普遍。而为了满足这个需求,我们可以使用三种方式来读取Excel文件,分别是:

1. 使用OleDb方式

OleDb是微软定义的一种开放式组件,它提供的接口可以让我们通过SQL语句来对多种数据源进行访问,包括Excel文件。这种方式需要注意的是,要求读取的Excel文件必须先经过导入。

以下是示例代码:

string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFilePath + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
OleDbConnection conn = new OleDbConnection(connString);
conn.Open();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + sheetName + "$]", conn);
DataTable dt = new DataTable();
da.Fill(dt);
conn.Close();

2. 使用ADO.NET方式

ADO.NET是微软提供的一种基于.NET Framework的数据访问技术,它包括DataSet、DataAdapter、DataView等多种组件,可以满足对于多种数据源的访问需求,包括Excel文件。这种方式需要注意的是,读取过程比较繁琐,需要逐个读取单元格的内容。

以下是示例代码:

string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFilePath + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
OleDbConnection conn = new OleDbConnection(connString);
conn.Open();
OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + sheetName + "$]", conn);
OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
DataTable dt = new DataTable();
for (int i = 0; i < dr.FieldCount; i++)
{
    dt.Columns.Add(dr.GetName(i));
}
while (dr.Read())
{
    DataRow row = dt.NewRow();
    for (int i = 0; i < dr.FieldCount; i++)
    {
        row[i] = dr[i];
    }
    dt.Rows.Add(row);
}
dr.Close();
conn.Close();

3. 使用第三方库EPPlus方式

EPPlus是一款基于Open XML SDK的开源库,可以让我们以较少的代码量读取Excel文件。这种方式需要注意的是,需要引入EPPlus库,并且在代码中进行初始化。

以下是示例代码:

ExcelPackage package = new ExcelPackage(new FileInfo(excelFilePath));
ExcelWorksheet worksheet = package.Workbook.Worksheets[sheetName];
DataTable dt = new DataTable();
foreach (var firstRowCell in worksheet.Cells[1, 1, 1, worksheet.Dimension.End.Column])
{
    dt.Columns.Add(firstRowCell.Text);
}
for (var rowNumber = 2; rowNumber <= worksheet.Dimension.End.Row; rowNumber++)
{
    var row = worksheet.Cells[rowNumber, 1, rowNumber, worksheet.Dimension.End.Column];
    var newRow = dt.Rows.Add();
    foreach (var cell in row)
    {
        newRow[cell.Start.Column - 1] = cell.Text;
    }
}

比较分析

在三种方式中,EPPlus方式无疑是最方便和容易上手的。它具有以下优点:

  • 通过较少的代码量即可读取Excel文件;
  • 不需要预先导入文件;
  • 不需要逐个读取单元格的内容。

相比之下,OleDb方式和ADO.NET方式都需要读取单元格的内容,在读取大量数据时效率会比较低。但是,OleDb方法可以不需要导入文件,比ADO.NET方法更方便。

示例

示例1:使用OleDb方式读取Excel文件

下面是一个示例,演示如何使用OleDb方式读取Excel文件:

string excelFilePath = @"C:\example.xlsx";
string sheetName = "Sheet1";
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFilePath + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
OleDbConnection conn = new OleDbConnection(connString);
conn.Open();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + sheetName + "$]", conn);
DataTable dt = new DataTable();
da.Fill(dt);
conn.Close();

示例2:使用EPPlus方式读取Excel文件

下面是一个示例,演示如何使用EPPlus方式读取Excel文件:

string excelFilePath = @"C:\example.xlsx";
string sheetName = "Sheet1";
ExcelPackage package = new ExcelPackage(new FileInfo(excelFilePath));
ExcelWorksheet worksheet = package.Workbook.Worksheets[sheetName];
DataTable dt = new DataTable();
foreach (var firstRowCell in worksheet.Cells[1, 1, 1, worksheet.Dimension.End.Column])
{
    dt.Columns.Add(firstRowCell.Text);
}
for (var rowNumber = 2; rowNumber <= worksheet.Dimension.End.Row; rowNumber++)
{
    var row = worksheet.Cells[rowNumber, 1, rowNumber, worksheet.Dimension.End.Column];
    var newRow = dt.Rows.Add();
    foreach (var cell in row)
    {
        newRow[cell.Start.Column - 1] = cell.Text;
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#读取Excel的三种方式以及比较分析 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • .Net Core限流的实现示例

    .NET Core限流的实现示例 在高并发的应用程序中,限流是一种重要的技术,可以帮助我们控制请求的流量,防止系统过载。本攻略将介绍如何在.NET Core中实现限流,并提供两个示例说明。 实现限流 在.NET Core中,我们可以使用以下方法来实现限流: 1. 令牌桶算法 令牌桶算法是一种常用的限流算法,它基于一个令牌桶,每个请求需要从令牌桶中获取一个令牌…

    C# 2023年5月17日
    00
  • ASP.NET Core – 缓存之内存缓存(下)

    话接上篇 [ASP.NET Core – 缓存之内存缓存(上)],所以这里的目录从 2.4 开始。 2.4 MemoryCacheEntryOptions MemoryCacheEntryOptions 是内存缓存配置类,可以通过它配置缓存相关的策略。除了上面讲到的过期时间,我们还能够设置下面这些: 设置缓存优先级。 设置在从缓存中逐出条目后调用的 Post…

    C# 2023年4月17日
    00
  • C#循环与循环控制的表达式树实现

    C#循环与循环控制是C#编程中的重要部分,可以用来重复执行一段代码块,直到达到特定的条件。循环的类型有多种:for循环,while循环,do-while循环等,每种循环类型都有自己的特点和应用场景。本文将介绍C#循环及循环控制的使用,并且重点讲解了C#表达式树实现循环控制的方法。 C#循环 for循环 for循环是C#语言中最常用的循环结构之一,其语法格式如…

    C# 2023年6月1日
    00
  • 带你复习c# 托管和非托管资源

    带你复习c#托管和非托管资源 托管资源与非托管资源的概念 托管资源是指由CLR(公共语言运行库)进行垃圾回收和内存分配等管理的资源,常见的有.NET框架类库、用户自定义的类、字符串等。 而非托管资源是指CLR不进行资源管理的资源,常见的有操作系统资源、COM组件、指针、内存映射文件等。 如何释放非托管资源 在C#中释放非托管资源一般采用IDisposable…

    C# 2023年6月6日
    00
  • C#中+=是什么意思及+=的用法

    当我们在C#中使用“+=”时,它实际上是一个复合赋值运算符,旨在在现有变量的基础上添加新值。这个符号结合了加号“+”和赋值号“=”,并简化了代码,使其更易读。 使用“+=”的基本语法如下: variable += newValue; 其中,variable是要添加值的变量,newValue是要添加到variable的新值。如果variable中有旧值,则ne…

    C# 2023年6月1日
    00
  • ASP.NET中的URL过滤实现代码

    关于ASP.NET中的URL过滤实现代码,可以分为以下几个步骤: 1. 在Web.config中配置URL过滤规则 在ASP.NET中,可以使用系统自带的UrlRoutingModule类进行Url处理,可以在Web.config文件中配置一个HTTP模块将HTTP请求映射到这个类上。 代码如下所示: <system.webServer> &lt…

    C# 2023年5月31日
    00
  • C#实现的鼠标钩子

    C#实现鼠标钩子可以用来监视和控制鼠标事件,比如截取特定的鼠标事件、拦截在系统中发生的鼠标消息等。这里提供完整攻略,具体过程如下: 准备工作 在开始实现之前,需要准备以下工作: 安装Visual Studio,该IDE提供C#开发环境。选择安装.NET桌面开发工作负载,并安装所需的组件。 创建一个新的C#控制台应用程序项目。 添加一个引用System.Win…

    C# 2023年6月1日
    00
  • C#创建Windows服务与服务的安装、卸载

    下面将为你详细讲解“C#创建Windows服务与服务的安装、卸载”的完整攻略。 1. 创建 Windows 服务 1.1 使用 Visual Studio 创建服务项目 打开 Visual Studio,选择“文件”-“新建”-“项目”,在“新建项目”窗口中选择“Windows 服务”项目模板,点击“确定”按钮创建项目。 1.2 设计服务程序 服务程序类必须…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部