none
存取EXCEL檔案時讀不到第一列的資料 其他列都可以 不知道是哪裡寫錯了 麻煩各位幫我解決謝謝 RRS feed

  • 問題

  • 以下是程式碼

     

    using System;
    using System.Data;
    using System.Data.OleDb;


    public class TestExcel
    {
        public static void Main ()
     {
            try
            {
                string path = "d:\\testdb\\ttt.xls";
                string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source ="+path+";Extended Properties=Excel 8.0";
                OleDbConnection myConn = new OleDbConnection(strCon);
                string strCom = " Select * FROM [Sheet1$] ";
                myConn.Open();
                OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
                DataSet myDataSet = new DataSet();
                myCommand.Fill(myDataSet, "[Sheet1$]");
                          
                foreach (DataTable table in myDataSet.Tables)
                {
                    foreach (DataRow row in table.Rows)
                    {
                        foreach (DataColumn column in table.Columns)
                        {
                            Console.WriteLine(row[column]);
                        }
                    }
                }
                myConn.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: Failed to create a excel connection. \n{0}", ex.Message);
                return;
            }  
        }
    }

    2007年1月24日 上午 07:25

解答

  • string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source ="+path+";Extended Properties=Excel 8.0";

    改成

    string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source ="+path+";Extended Properties=\"Excel 8.0; HDR=NO\"";

    看看能不能讀到第一列。

    2007年1月24日 上午 08:18
    版主

所有回覆

  • 第一列固定都拿來當作

    DataColumn的ColumnName

    所以讀不到是正常的

    請您在excel新增一列當作第一列

    作為ColumnName

     

    2007年1月24日 上午 07:38
  • 那如果我想要取出這些COLUMN NAME呢 該怎麼做呢???
    2007年1月24日 上午 07:54
  • 我的意思是說Excel檔的格式應該如下

    欄位名稱(第一列)  員工| 編號 | 日期| 金額.....................

    資料(第二列以下)  xxxx | fffffff  |hhhh | kkkk....

                                    ....................................

    第一列就固定放欄位名稱

    第二列之後就是資料內容

    2007年1月24日 上午 08:02
  • 那就是第一列沒辦法讀取出來囉
    2007年1月24日 上午 08:12
  • 是的

    因為預設讀取時就將第一列當作DataSet的DataTable

    的欄位名稱

     

    2007年1月24日 上午 08:15
  • string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source ="+path+";Extended Properties=Excel 8.0";

    改成

    string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source ="+path+";Extended Properties=\"Excel 8.0; HDR=NO\"";

    看看能不能讀到第一列。

    2007年1月24日 上午 08:18
    版主
  • 可以了 謝謝朱大大

    請問您一下 HDR=NO 這是什意思呢??

    2007年1月24日 上午 08:39
  • HDR 是告訴 OLE DB Provider 把第一列當成欄位名稱來讀。
    如果設為 NO 的話,它會使用 Fnn (nn = 欄位索引,如 F1, F2, F3, ...) 當做欄位名稱。
    如果設為 YES,它會使用第一列當欄位名稱。
    2007年1月24日 上午 08:53
    版主