2011-08-23 29 views
2

我具有類似於excel工作表:如何讀取數據的列標題並在Excel中每個小區的數據使用C#

excel screenshot

欲讀取數據的列報頭:全部,COL1,COL2,COL3 ,COL4,COL5

,並獲得在data.for行= 2的示例小區和列中的所有小區2 = 0

我目前寫這樣的代碼:

OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT top 5 * FROM " + excelSheets[j], connString); 
DataTable fooData = new DataTable(); 
dbAdapter.Fill(fooData); 
foreach (DataRow row in fooData.Rows) 
{ 
    Response.Write(row[0].ToString()); 
    //Response.Write(row[1].ToString()); 
} 

但它返回的只是一個數據表,其中只有一列,而且只是第1行到第5行的文本。

我該怎麼做?

請說出答案,而不使用Linq to Excel Provider和Open Xml。

編輯1:

string file_name = "C:\\Book1.xlsx"; 
     string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file_name + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\""; 
     objConn = new OleDbConnection(connString); 
     objConn.Open(); 
     dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 

     if (dt == null) 
     { 
      Response.Write("Not Exist"); 
     } 

     String[] excelSheets = new String[dt.Rows.Count]; 
     int i = 0; 

     foreach (DataRow row in dt.Rows) 
     { 
      excelSheets[i] = row["TABLE_NAME"].ToString(); 
      i++; 
     } 

     // Loop through all of the sheets if you want too... 
     for (int j = 0; j < excelSheets.Length; j++) 
     { 
      OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT top 100 * FROM " + excelSheets[j], connString); 
      DataTable fooData = new DataTable(); 
      dbAdapter.Fill(fooData); 
      foreach (DataRow row in fooData.Rows) 
      { 
       Response.Write(row[0].ToString()); 
      } 

     } 
+0

當您使用「SELECT * FROM」,而不是發生了什麼? – Yahia

+0

它返回超過100000行 – Arian

+0

我知道 - 但是你有沒有列標題? – Yahia

回答

0
"SELECT * FROM [" + excelSheets[j] + "$A1:C5]" 

試試這個。它應該將所有單元格從A1返回到C5。

+0

我得到這個錯誤:'Microsoft Office Access數據庫引擎找不到對象'Nima $ A1:C5'。確保對象存在,並且正確拼寫其名稱和路徑名。' – Arian

0

您選擇的驅動程序是Excel 2007中( 「供應商= Microsoft.ACE.OLEDB。 .0」 在你的connectionString)。你的Excel文件是2007年還是2010年?

+0

我使用Excel 2007 – Arian

+0

嘗試將IMEX = 1附加到ConnectionString中。有關此更多詳細信息,請訪問http:// www。connectionstrings.com/excel-2007 – Arun

+0

沒有任何變化。我只得到1列 – Arian

0

僅用於數據列標題的邏輯是在這裏:

    string filePath = "C:\\Book1.xlsx"; 
       string connString = string.Empty; 
       if (path.EndsWith(".xlsx")) 
       { 
        //2007 Format 
        connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No'", path); 
       } 
       else 
       { 
        //2003 Format 
        connString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No'", path); 
       } 
       using (OleDbConnection con = new OleDbConnection(connString)) 
       { 
        using (OleDbCommand cmd = new OleDbCommand()) 
        { 
         //Read the First Sheet 
         cmd.Connection = con; 
         con.Open(); 
         DataTable dtExcelSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
         con.Close(); 
         string firstSheet = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); 

         //Read the Header Row 
         cmd.CommandText = "SELECT top 1 * From [" + firstSheet + "]"; 
         using (OleDbDataAdapter da = new OleDbDataAdapter(cmd)) 
         { 
          DataTable HeaderColumns = new DataTable(); 
          da.SelectCommand = cmd; 
          da.Fill(HeaderColumns); 
          List<string> Filedata = new List<string>(); 
          foreach (DataColumn column in HeaderColumns.Columns) 
          { 
           string columnName = HeaderColumns.Rows[0][column.ColumnName].ToString(); 


           Filedata.Add(columnName); 

           ViewBag.Data = Filedata; 
          } 
         } 
        } 
       } 
相關問題