2017-07-24 54 views
-1
   _conn = new OleDbConnection(_connectionStrting); 
       _conn.Open(); 
       DataTable dt = _conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
       String[] sheetNames = new String[dt.Rows.Count]; 
       int i = 0; 

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

       _conn.Close(); 

此代碼對我的作品在C#中的Excel工作表的名稱,但我想知道是否有OleDbDataAdapter的解決方案怎樣才能得到全部使用OleDbDataAdapter的

+0

的[從OleDbDataAdapter的填充數據集]可能的複製(https://stackoverflow.com/questions/15735184/fill-dataset-from-oledbdataadapter) – Magu

+0

歡迎來到SO!看到這裏如何發佈一個很好的問題:https://stackoverflow.com/help/how-to-ask –

回答

0

OleDbDataAdaptor無關與工作表名稱;工作表名稱屬於Excel.Workbook,Excel工作簿屬於Excel.Application。 您需要通過工作簿表名稱迭代:

using Excel = Microsoft.Office.Interop.Excel; 

Excel.Application xl = new Excel.Application();; 
Excel.Workbook wb = xl.Workbooks.Open("WorkBookfullPath", 0, true); 

foreach (Excel.Worksheet ws in wb.Worksheets) { 
     { 
      string wsName = ws.Name; 
     } 

你並不真的需要這裏OleDbDataAdapter的,在這種情況下(如果你需要閱讀從工作表數據),你可以從Excel中讀取到2維陣列(第一尺寸的行和第二維是列):

object[,] data = ws.UsedRange.Value2; // change UsedRange range to your table range, and you can also use ws.UsedRange.FormulaR1C1 
+0

這種方式更好,謝謝 –

+0

不客氣。另外請記住,處理Microsoft.Office.Interop.Excel可能會很棘手。在這裏閱讀如何正確退出Excel:https://stackoverflow.com/questions/45010084/unable-to-open-another-excel-file-when-one-excel-is-opened-by-net/45131821#45131821 –