如何使用 c # 从 Excel 文件读取数据

我的应用程序需要从 Excel 文件中读取数据。 我不能在系统中安装微软办公软件。由于这个原因,我的应用程序无法读取 excel 文件,并在加载 Excel 的 dll 时抛出一个错误。

如何在没有安装 msoffice 的系统中访问应用程序中的 excel 文件?

483125 次浏览

将 Excel 文件保存到 CSV,并使用类似 文件帮助者的 CSV 读取器库用 C # 读取生成的文件。

将 excel 文件转换为 .csv文件(逗号分隔值文件) ,现在您可以很容易地读取它。

用于读取 Excel97-2003文件(XLS)的 CSharpJExcel ,用于读取 Excel2007/2010文件的 卓越套餐(Office Open XML 格式,XLSX) ,以及似乎能够同时处理这两种格式的 ExcelDataReader

祝你好运!

有一个选项可以使用 OleDB和使用 Excel 工作表,就像数据库中的数据表一样..。

举个例子。

string con =
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\temp\test.xls;" +
@"Extended Properties='Excel 8.0;HDR=Yes;'";
using(OleDbConnection connection = new OleDbConnection(con))
{
connection.Open();
OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection);
using(OleDbDataReader dr = command.ExecuteReader())
{
while(dr.Read())
{
var row1Col0 = dr[0];
Console.WriteLine(row1Col0);
}
}
}

此示例使用 Microsoft.Jet.OleDb.4.0提供程序打开和读取 Excel 文件。但是,如果文件的类型为 xlsx (来自 Excel2007和更高版本) ,则需要下载 访问数据库引擎组件并将其安装到目标计算机上。

提供程序称为 Microsoft.ACE.OLEDB.12.0;。请注意这个组件有两个版本,一个是32位的,一个是64位的。根据应用程序的位数和安装的 Office 版本(如果有的话)选择适当的版本。让驱动程序正确地为应用程序工作有很多怪癖。比如这个问题.

当然,您不需要在目标计算机上安装 Office。

虽然这种方法有一些优点,但我认为您应该特别注意您的问题 从 C # 读取 excel 文件中的评论所表示的链接。在正确解释数据类型以及单个 Excel 单元格中的数据长度超过255个字符时,存在一些问题

我没有可用的机器来测试这一点,但它应该工作。首先,您可能需要安装 2007 Office 系统驱动程序: 数据连接组件MicrosoftAccess 数据库引擎2010可重新发布。然后尝试下面的代码,注意您需要在下面的 Select 语句中更改“工作表”的名称,以匹配 Excel 文件中的工作表名称:

using System.Data;
using System.Data.OleDb;


namespace Data_Migration_Process_Creator
{
class Class1
{
private DataTable GetDataTable(string sql, string connectionString)
{
DataTable dt = null;


using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
using (OleDbCommand cmd = new OleDbCommand(sql, conn))
{
using (OleDbDataReader rdr = cmd.ExecuteReader())
{
dt.Load(rdr);
return dt;
}
}
}
}


private void GetExcel()
{
string fullPathToExcel = "<Path to Excel file>"; //ie C:\Temp\YourExcel.xls
string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=yes'", fullPathToExcel);
DataTable dt = GetDataTable("SELECT * from [SheetName$]", connString);


foreach (DataRow dr in dt.Rows)
{
//Do what you need to do with your data here
}
}
}
}

注意: 我没有一个环境来测试这一点(一个办公室安装) ,所以我不能说它是否会在您的环境中工作,但我不知道为什么它不应该工作。