下面是详细讲解“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技术站