1. 程式人生 > >C#用ado.net訪問EXCEL(含EXCEL2010)的常見問題及解決方法

C#用ado.net訪問EXCEL(含EXCEL2010)的常見問題及解決方法

C#用ado.net訪問EXCEL的常見問題及解決方法,除了像sql server,access常見的資料庫,其實Excel檔案也可以做為資料庫訪問。

ado.net訪問excel的例項:

OleDbConnection cn = new OleDbConnection();
cn.ConnectionString = @"provider=Microsoft.jet.oledb.4.0;data source=[excel檔案路徑];Extended Properties=""Excel 8.0;HDR=YES;""";
cn.Open();
OleDbDataAdapter oda = new OleDbDataAdapter("select * from [Sheet1$]", cn);
dtCode = new DataSet();
oda.Fill(dtCode);
dataGridView1.DataSource = dtCode.Tables[0].DefaultView;

注意:

1、Excel的工作簿名作為表名,如Sheet1書寫為[Sheet1$],[]和$都不能省略

2、訪問方式為oledb方式,provider=Microsoft.jet.oledb.4.0 ,特別是Extended Properties=""Excel 8.0;HDR=YES;"" 不能省略,省略就錯了。HDR=YES表示excel表格的第一行資料作為表的欄位名,實際資料從第二行開始。

我在第一次做的時候碰到兩個問題。

(1)提示"找不到可安裝的ISAM"

這個是由於連線字串缺少Extended Properties=""Excel 8.0;HDR=YES;"" 導致的。

(2)提示"索引103開始處,初始化字串的格式不符合規範"

這是由於連線字串書寫錯誤造成的,請參考正確的格式。這個錯誤的提示對應的連結字串如下:

"provider=Microsoft.jet.oledb.4.0;data source=[excel檔案路徑];Extended Properties=""Excel 8.0;HDR=YES;"
可以看到錯誤是由於Extended Properties的值是由""括起來的,由於丟失了右邊的括號,造成不符合規範。

如果您用的 EXCEL2010,注意連線串需要修改:

strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
  @"Data Source=" + excelFilename + ";" +
  "Extended Properties=\"Excel 12.0 Xml;HDR=No\"";