2009-09-03 51 views
2

如何读取excel文件并在网格视图中显示其数据?我尝试了ODBC提供程序的工作,但它正在发生赢得“Dns = EXCELF”,它将如何与连接sring?我生成我的Excel表连接字符串为:如何通过连接字符串读取c#中的Excel文件?

Provider = MSDASQL.1; Persist Security Info = False; User ID = admin; Data Source = Excel Files; Initial Catalog = D:\ Parallelminds \ Tryouts \ sample.xlsx

这是错的吗?请指导我。哪个连接字符串我必须在那里...?

回答

4

它通过的Excel版本略有不同,但如果这是预2007年,你可以找到你所需要的是什么:http://connectionstrings.com/excel

否则,浏览http://connectionstrings.com/。它在那里,我保证:)。

+1

+1非常好的链接!只记得复制你的答案的一些信息,你永远不知道一个链接将生存多少! – backslash17 2009-09-03 14:03:41

+0

好点的反斜杠,尽管connectionstrings.com已经存在至少8或9年了:) – jvenema 2009-09-04 13:12:27

+0

不值得的方法!读取时,将文本列截断为255个字符。谨防!请参阅:http://stackoverflow.com/questions/1519288/jet-engine-255-character-truncation ACE引擎做同样的事情!查看我对该链接中所选答案的评论。 – Triynko 2010-05-13 18:52:45

0

这个Excel Data Provider非常方便。我最近在客户的某个网站上使用了它,并进行了一些小的自定义设置。如果您仔细查看代码,您应该能够深入了解如何从C#查询Excel。

只是一个警告:如果未在部署机器上安装Excel,那么您将被限制为解析标准XLS文件(Office到2003),并且将无法读取XLSX(Office 2007)。

+0

这是另一个警告。 JET和ACE引擎可以将字段截断为255个字符,因此它们真的不可靠。从Excel文件读取基本上是一个彻头彻尾的破解。唯一可靠的方法是实际运行一个Excel实例并使用.NET COM interop类,但这会增加对应用程序的依赖性,并要求在计算机上安装Excel。真是笑话! – Triynko 2010-05-13 18:56:01

2
public string BuildExcelConnectionString(string Filename, bool FirstRowContainsHeaders){ 
     return string.Format("Provider=Microsoft.Jet.OLEDB.4.0; 
     Data Source='{0}';Extended Properties=\"Excel 8.0;HDR={1};\"", 
     Filename.Replace("'", "''"),FirstRowContainsHeaders ? "Yes" : "No"); 
} 

public string BuildExcel2007ConnectionString(string Filename, bool FirstRowContainsHeaders){ 
     return string.Format("Provider=Microsoft.ACE.OLEDB.12.0; 
     Data Source={0};Extended Properties=\"Excel 12.0;HDR={1}\";", 
     Filename.Replace("'", "''"),FirstRowContainsHeaders ? "Yes" : "No"); 

} 

private void ReadExcelFile(){ 
    string connStr = BuildExcel2007ConnectionString(@"C:\Data\Spreadsheet.xlsx", true); 
    string query = @"Select * From [Sheet1$] Where Row = 2"; 
    System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(connStr); 

    conn.Open(); 
    System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(query, conn); 
    System.Data.OleDb.OleDbDataReader dr = cmd.ExecuteReader(); 
    DataTable dt = new DataTable(); 
    dt.Load(dr); 
    dr.Close(); 
    conn.Close(); 
} 
相关问题