как получить все имена листов excel в С# с помощью OleDbDataAdapter

               _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();

этот код работает для меня, но я хочу знать, есть ли решение с OleDbDataAdapter


person soroosh elyasi    schedule 24.07.2017    source источник
comment
Возможный дубликат Fill DataSet из OleDbDataAdapter   -  person Markus    schedule 24.07.2017
comment
Добро пожаловать в СО! См. здесь, как опубликовать хороший вопрос: stackoverflow.com/help/how-to-ask   -  person Robert Moskal    schedule 24.07.2017


Ответы (1)


OleDbDataAdaptor не имеет ничего общего с именами листов; Имена листов принадлежат Excel.Workbook, а Excel Workbook принадлежит 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 в двумерный массив (1-е измерение - строки, а второе измерение - столбцы):

object[,] data = ws.UsedRange.Value2; // change UsedRange range to your table range, and  you can also use ws.UsedRange.FormulaR1C1
person Richard Mneyan    schedule 24.07.2017
comment
Пожалуйста. Также помните, что работа с Microsoft.Office.Interop.Excel может быть сложной. Прочитайте здесь, как правильно выйти из Excel: stackoverflow.com/questions/45010084/ - person Richard Mneyan; 25.07.2017