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日

相关文章

  • Java中Switch用法代码示例

    理解和掌握Java中的switch语句是我们编写程序时的必修课程之一。在本文中,我将详细讲解Java中switch语句的用法和注意事项,包括语法、代码示例和执行流程。 switch语句的语法 Java中的switch语句,用于根据表达式的值,从多个选项中选择一个执行。其语法结构如下: switch(expression) { case value1: //执…

    C# 2023年5月15日
    00
  • C#难点逐个击破(7):checked与unchecked

    C#难点逐个击破(7):checked与unchecked checked与unchecked的作用 C#中对于数值类型的运算,当结果超出该类型所能存储的范围时,会发生溢出。而C#提供了checked和unchecked关键字来控制这种情况的处理。 checked关键字用于指示将溢出检测应用于所在作用域内的整个表达式。 unchecked关键字用于禁用溢出检…

    C# 2023年6月6日
    00
  • C#通过GET/POST方式发送Http请求

    下面我将为你详细讲解“C#通过GET/POST方式发送HTTP请求”的完整攻略。 1. 使用HttpWebRequest类发送GET请求 发送GET请求需要使用HttpWebRequest类。下面是发送GET请求的示例代码: string url = "https://example.com/api/"; HttpWebRequest r…

    C# 2023年5月31日
    00
  • C#中ListView控件实现窗体代码

    让我来为您详细讲解C#中ListView控件实现窗体代码的完整攻略。 1. 创建ListView控件 要在C#中使用ListView控件,首先需要在窗体上添加该控件。可通过在Visual Studio设计器中双击工具箱中的ListView控件,将其放置在窗体上。或者在代码中使用以下代码创建: ListView listView1 = new ListView…

    C# 2023年6月1日
    00
  • CommunityToolkit.Mvvm系列文章导航

    包 CommunityToolkit.Mvvm (又名 MVVM 工具包,以前名为 Microsoft.Toolkit.Mvvm) 是一个现代、快速且模块化的 MVVM 库。 它是 .NET 社区工具包的一部分,围绕以下原则构建: 平台和运行时独立 – .NET Standard 2.0、 .NET Standard 2.1 和 .NET 6? (UI Fr…

    C# 2023年4月22日
    00
  • C# Aspose.Words 删除word中的图片操作

    下面是详细讲解“C# Aspose.Words 删除word中的图片操作”的完整攻略: 1. 引用Aspose.Words库 在Visual Studio中,打开项目,右键项目,选择“管理NuGet程序包”,搜索Aspose.Words并安装。 2. 打开Word文档 Document doc = new Document("example.doc…

    C# 2023年5月31日
    00
  • 从ASP.NET Core3.1迁移到5.0的方法

    从 ASP.NET Core 3.1 迁移到 5.0 可以带来更好的性能、更好的开发体验和更多的新功能。以下是从 ASP.NET Core 3.1 迁移到 5.0 的完整攻略: 步骤一:备份项目 在进行迁移前,需要备份 ASP.NET Core 3.1 项目。可以将项目文件复制到另一个目录或者使用版本控制系统来备份项目。 步骤二:更新 .NET Core S…

    C# 2023年5月17日
    00
  • C#实现线程池的简单示例

    下面是呈现 C#实现线程池的简单示例 的攻略。 一、什么是线程池 线程池是一种应对多线程编程,用于优化性能的一种技术。简而言之,线程池就是提前创建一堆线程,放入一个池子中,等待其他任务出现时就可以利用这些线程来处理它们,从而避免了每次出现任务时都需要创建新线程的开销。 二、.NET官方提供的线程池 .NET官方提供了ThreadPool类,该类提供了一个全局…

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