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日

相关文章

  • C#中?、?.、??、??=运算符的用法

    下面是详细讲解C#中?、?.、??、??=运算符的用法: ?运算符 ?运算符在C#中表示空值传播(Null Propagation),其作用是防止空引用异常(NullReferenceException)的发生,它的基本语法形式如下:obj?.PropertyName。 当obj不为null时,?.会直接返回obj.PropertyName的值;当obj为n…

    C# 2023年5月14日
    00
  • C#实现的UDP收发请求工具类实例

    下面为您详细讲解如何实现“C#实现的UDP收发请求工具类实例”。 什么是UDP? UDP是一种无连接的传输协议,它不保证数据传输的可靠性,但是在实时传输和流媒体等领域得到了广泛应用。通过UDP传输数据时,数据包不可靠地从源端发送到目的地,不会进行确认、重传和拥塞控制等。 C#中的UDP实现 C#中提供了Socket类,可以用于创建UDP套接字和进行数据的收发…

    C# 2023年6月6日
    00
  • ASP.Net Core3.0中使用JWT认证的实现

    ASP.NET Core 3.0中使用JWT认证的实现攻略如下: 安装必要的NuGet包 在开始之前,需要安装以下NuGet包: Microsoft.AspNetCore.Authentication.JwtBearer System.IdentityModel.Tokens.Jwt 您可以使用以下命令在命令行中安装这些NuGet包: dotnet add …

    C# 2023年5月16日
    00
  • 理解C#中的事件

    理解C#中的事件可以分为以下几个步骤: 1. 事件的定义 在C#中,可以通过delegate关键字定义一个委托类型,并在委托类型的参数列表中定义事件所需要传递的参数,例如: public delegate void EventHandler(object sender, EventArgs e); 其中,EventHandler就是一个委托类型,它有两个参数…

    C# 2023年5月14日
    00
  • C# Linq的Average()方法 – 计算序列中元素的平均值

    C#中的“Language-Integrated Query”(简称:Linq)是一种强大的查询技术,它提供了一种方便、快速、灵活的方法来查询各种数据源。Linq中有许多方法,其中一个非常常用的方法就是Average()。下面就让我们来详细了解一下Average()方法的使用和实现。 方法概述 Average()方法可以用于计算一个序列的平均数,支持对整数、…

    C# 2023年4月19日
    00
  • jQuery Ajax调用WCF服务详细教程

    jQuery Ajax调用WCF服务详细教程 WCF(Windows Communication Foundation)是一种用于构建分布式应用程序的技术。在Web应用程序中,我们可以使用jQuery Ajax调用WCF服务来实现与服务器的通信。本文将详细讲解如何使用jQuery Ajax调用WCF服务,并提供两个示例。 1. 创建WCF服务 以下是创建WC…

    C# 2023年5月15日
    00
  • C#中委托的基本概念介绍

    下面我将详细讲解” C#中委托的基本概念介绍”: 委托 委托(Delegate)是C#中一个非常重要的概念,被称为“对象安全的函数指针”。委托可以指向一个具有特定参数列表和返回类型的方法。将方法封装在一个委托中,就可以像调用方法一样调用委托。委托在多线程编程、事件处理等方面有着广泛的应用。 委托的定义 C#中委托类型的定义通常需要指定该委托所能绑定的方法签名…

    C# 2023年5月15日
    00
  • 学习TraceLogging事件,使用ETW记录,并使用WPA捕获和分析跟踪

    优化响应行为的交互 下载WINDOWS评估和部署工具包 (Windows ADK) 保持默认安装 驱动延迟优化的基本步骤包括: 定义方案并添加 TraceLogging 事件。TraceLogging 是用于日志记录事件的系统,无需清单即可解码,TraceLogging基于windows事件跟踪(ETW),并提供检测代码的简化办法。C#可选的有.NET Ev…

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