2009年2月6日 星期五

C# 讀取Excel 欄位

其實主要要做是將 Excel 內容讀入到 資料庫(SQL),可是因為 Excel 表格並不是統一的
所以再讀入 SQL 之前,必須要先處理過。

目前第一步 試著將 Excel 讀入到 C# 表單內,以供後續處理。

//讀取 C:\qq.xls 檔案內資料至 MessageBox
listBox1.Items.Clear();
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\qq.xls;Extended Properties=\"Excel 8.0;HDR=NO\"";
//HDR 是用來判斷 Excel 第一欄標題
OleDbConnection cn = new OleDbConnection();
cn.ConnectionString = sConnectionString;
cn.Open();

string sSQL = "SELECT * FROM [Sheet1$]";
OleDbCommand cmd = cn.CreateCommand();
cmd.CommandText = sSQL;
OleDbDataReader DR = cmd.ExecuteReader();
while (DR.Read())
{
listBox1.Items.Add(DR[0] + "," + DR[1] + "," + DR[2]);
}

cn.Close();

目前遇到的問題是,如果 Excel 內容裡面有包含 數字、文字 時(同一行)
那麼會沒有辦法讀出 數字。。 目前正在想辦法。。


下面這種寫法跟上面的一樣....只是換了不同敘述而已
也不能解決 文字和數字 並存。。。
//讀取 C:\qq.xls 檔案內資料至 MessageBox
string path = "c:\\QQ.xls";
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + path + ";Extended Properties='Excel 8.0;HDR=NO'";
OleDbConnection objConn = new OleDbConnection(strCon);
string strCom = " SELECT * FROM [Sheet1$] ";
objConn.Open();

OleDbDataAdapter objCmd = new OleDbDataAdapter(strCom, objConn);
DataSet objDS = new DataSet();
objCmd.Fill(objDS);
objConn.Close();

for (int i = 0; i < objDS.Tables[0].Rows.Count; i++)
{
//listBox1.Items.Add(objDS.Tables[0].Rows[i][1].ToString());
listBox1.Items.Add(objDS.Tables[0].Rows[i][0] + "," + objDS.Tables[0].Rows[i][1].ToString() + "," + objDS.Tables[0].Rows[i][2].ToString());
}

2 則留言:

  1. 不好意思
    我是個新手,有看到你上面這個說明可以拉excel的資料
    中間有一段字說明現在文字跟數字並存的問題,請問這個已可解了嗎?
    另外這上面的程式是要打在那呢?
    我有在From.cs[設計]的畫面上把ListBox拉進去在點兩下,把上面第一個的程式copy進去,也把Source=c:\\qq.xls的路徑改為我自已的,FROM [Sheet1$]也有改過,不過在執行完,Listbox沒動作,後來又加了一個button進去,把程式改在button,執行後會出現一個問題指向這一個說有問題cn.Open();請問是什麼原因呢?另外我的軟體是Visual studio 2010跟excel 2010的。
    我的msn:beardad0727@hotmail.com
    如果可以的話麻煩教一下
    謝謝哦

    回覆刪除
  2. 你好,小義:
    cn.Open(); 連線無法開啟有可能是 Excel 的版本問題,由於我手上沒有安裝 2010 的文件版本,所以無法幫你測試。

    請你參考這份文件,並下載試試看,這是已經寫好
    讀取 Excel 的簡單範例。

    http://kuomingwang.blogspot.com/2011/11/excel-c-oledb-excel.html

    回覆刪除