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日

相关文章

  • SpringMVC结合Jcrop实现图片裁剪

    SpringMVC结合Jcrop实现图片裁剪 简介 在Web开发中,图片处理是非常常用而且重要的一个功能。而在实际开发中,我们经常需要对图片进行剪裁操作,这也是图片处理的一个重要环节。本篇文章将介绍如何在SpringMVC框架下,使用Jcrop第三方库实现对图片的裁剪操作。 准备工作 在开始我们的教程之前,需要先准备好以下环境: Java 8+ Spring…

    C# 2023年5月31日
    00
  • 轻松学习C#的ArrayList类

    轻松学习C#的ArrayList类 介绍 ArrayList是C#中的一个动态数组类,可以自动调整大小,支持任意数据类型的添加和移除。本文将提供一个完整的攻略,帮助你轻松学习并应用ArrayList。 创建ArrayList对象 你可以使用以下方法创建一个ArrayList对象: ArrayList list = new ArrayList(); 添加元素 …

    C# 2023年5月31日
    00
  • c#.net全站防止SQL注入类的代码

    下面我将详细讲解如何编写一份C#.NET全站防止SQL注入类的代码。 为什么需要防止SQL注入 SQL注入是一种常见的网络攻击方法,攻击者利用特定的技术,向Web应用程序的后端数据库发送恶意SQL查询。这些查询可以导致数据库泄露数据、破坏数据库的结构等等,对网站的安全造成威胁。 因此,保护Web应用程序免受SQL注入攻击非常重要,而采用防止SQL注入的代码类…

    C# 2023年5月31日
    00
  • 使用JsonConverter处理上传文件的路径问题

    为了讲解使用JsonConverter处理上传文件的路径问题的完整攻略,我们首先需要了解以下几点: 在使用表单上传文件时,文件被上传到服务器的临时目录中,而其路径是以操作系统为基础的绝对路径。 在Json格式中,使用斜杠(/)来表示路径分隔符。 在路径处理中,我们需要处理不同操作系统下的路径分隔符,因为在Windows上使用反斜杠(\)作为路径分隔符,在Un…

    C# 2023年5月31日
    00
  • 在C#中调用VBScript、javascript等脚本的实现代码

    在C#中调用VBScript或JavaScript脚本,可以通过使用Microsoft Script Control(MS Script Control)实现。MS Script Control是一个COM组件,用于解析和执行脚本文件,并提供了一组对象模型和方法,用于从C#代码中调用脚本。 以下是在C#中调用VBScript的示例代码: using Micr…

    C# 2023年6月7日
    00
  • C#实现获取程序路径方法小结

    C#实现获取程序路径方法小结 在开发C#程序时,有时候需要获取当前程序的路径,可以使用以下方法。 获取当前程序运行路径 以下是获取当前程序运行的路径的代码: string path = AppDomain.CurrentDomain.BaseDirectory; //或者使用以下逻辑 string path2 = System.IO.Directory.Ge…

    C# 2023年6月7日
    00
  • C#实现获取机器码的示例详解

    标题:C#实现获取机器码的示例详解 介绍 机器码是一个唯一标识电脑或设备的序列号,可以被用来实现软件的授权和管理。在C#中,可以通过获取机器码来实现软件的授权功能。本文将详细讲解如何使用C#实现获取机器码,并给出两个具体的示例。 获取机器码的方法 示例1:使用C#的WMI(Windows Management Instrumentation)服务 WMI是W…

    C# 2023年6月6日
    00
  • C#基于SQLiteHelper类似SqlHelper类实现存取Sqlite数据库的方法

    一、背景介绍SQLite是一个轻量级的关系型数据库,具有体积小,速度快,操作简便,易于集成等优点,在嵌入式设备,移动设备及桌面应用程序等方面得到广泛使用。C#语言作为一个跨平台的编程语言,在各个领域的应用也十分广泛,同时也提供了SQLite数据库的连接方式,提供SQLite连接C#的API。虽然C#提供了一些SQLite的API,但是操作SQLite数据库仍…

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