如何使用C#从excel文件读取数据

我的应用程序需要从Excel文件读取数据。 我正在使用.Net和C#进行开发。 我不能在系统中安装MS Office。 因为我的应用程序无法读取excel文件,并在加载DLL的Excel时引发错误。

我怎样才能在我的应用程序中没有安装ms office的系统访问excel文件?

有select使用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文件。 但是,如果文件types为xlsx(来自Excel 2007及更高版本),则需要下载Microsoft Access数据库引擎组件并将其安装到目标计算机上。

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

当然你不需要在目标机器上安装Office。

虽然这种方法有一些优点,但我认为你应该特别注意在你的问题中用注释表示的链接从C#中读取excel文件 。 关于数据types的正确解释存在一些问题,并且当存在于单个Excel单元中的数据的长度超过255个字符时

用于读取Excel 97-2003文件(xls)的CSharpJExcel: http : //sourceforge.net/projects/jexcelapi/

和用于读取Excel 2007/2010文件(Office Open XML格式,xlsx)的ExcelPackage: http ://excelpackage.codeplex.com/

和ExcelDataReader,似乎有能力处理这两种格式: https : //github.com/ExcelDataReader/ExcelDataReader

祝你好运!

我没有机器可以testing这个,但它应该工作。 首先,您可能需要安装2007 Office System Driver:Data Connectivity Components或Microsoft Access Database Engine 2010 Redistributable 。 然后尝试下面的代码,注意你将需要在下面的Select语句中更改工作表的名称以匹配excel文件中的sheetname:

 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 } } } } 

注:我没有一个环境来testing(一个安装Office),所以我不能说它是否会在你的环境中工作,但我不明白为什么它不应该工作。

将Excel文件保存为CSV,并使用C#使用CSV阅读器库(如FileHelpers)读取生成的文件。

将excell文件转换为.csv文件 – 逗号分隔值文件,您可以轻松读取它。