这个问题已经在这里有一个答案:
- 从C#阅读Excel文件 32回答
我的应用程序需要从一个excel文件中读取数据。 我使用.NET和C#进行开发。 我无法在系统中安装MS Office。 正因为如此的我的应用程序无法读取Excel文件,并同时加载了Excel中的DLL引发错误。
我如何才能获得在没有安装微软Office系统excel文件在我的应用程序?
这个问题已经在这里有一个答案:
我的应用程序需要从一个excel文件中读取数据。 我使用.NET和C#进行开发。 我无法在系统中安装MS Office。 正因为如此的我的应用程序无法读取Excel文件,并同时加载了Excel中的DLL引发错误。
我如何才能获得在没有安装微软Office系统excel文件在我的应用程序?
还有就是使用选项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(从Excel 2007和更高版本),那么你需要下载的Microsoft Access数据库引擎组件和目标计算机上安装它。
该供应商被称为Microsoft.ACE.OLEDB.12.0;
。 注意一个事实,即有两个版本,这种成分的一个32位和一个64位。 选择一个合适你的应用程序的位数和Office版本安装(如果有的话)是什么。 有很多怪癖的有该驱动程序正常工作为您的应用。 例如,见这个问题 。
当然,你并不需要在目标计算机上安装的Office。
虽然这种方法有一定的可取之处,我想你应该特别注意在你的问题中留言信号链路从C#阅读Excel文件 。 有关于数据类型的正确解释和超过255个字符时的数据的长度,存在于单个的excel细胞,较长的一些问题
CSharpJExcel阅读的Excel 97-2003文件(XLS): http://sourceforge.net/projects/jexcelapi/
和ExcelPackage读取的Excel 2007/2010文件(的Office Open XML格式,XLSX): http://excelpackage.codeplex.com/
和ExcelDataReader,似乎必须处理两种格式的能力: https://github.com/ExcelDataReader/ExcelDataReader
祝好运!
我没有获得一台机器来测试这一点,但它应该工作。 首先,你可能需要安装任何的2007 Office系统驱动程序:数据连接组件或Microsoft Access数据库引擎2010可再发行 。 然后尝试下面的代码,注意您需要更改下面的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
}
}
}
}
注:我没有的环境中进行测试(其中一个与Office安装),所以我不能说是否会工作在您的环境或没有,但我不明白为什么它不应该工作。
保存Excel文件,CSV,并阅读与使用CSV读者库,如C#生成的文件FileHelpers 。
转换的Excel文件.csv
文件( 逗号分隔值文件),现在你可以很容易地能够阅读它。