Amir2018 Ответов: 1

Как я могу выбрать разные листы excel?


Я хочу выбрать разные листы одного файла excel, но следующий OleDbDataAdapter использует данные предыдущего листа (мой файл excel имеет два листа namly Rv и NumOfmachine).


это мой код.:
DataNumOfmachine использует технический паспорт Rv.




OleDbConnection Amir = new OleDbConnection();
    OleDbCommand AmirCom = new OleDbCommand();
    OleDbDataAdapter DataRv, DataNumOfmachine = new OleDbDataAdapter();
    DataSet AmirDataSet = new DataSet();
    DataTable AmirDataTable = new DataTable();
    
    Amir.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\DataSource.xlsx;Extended Properties='Excel 12.0;HDR=YES';";
    //Amir.Open();
    
    

    DataRv = new OleDbDataAdapter("select * from [Rv$]", Amir);
    //AmirData.Fill(AmirDataSet);
    DataRv.Fill(AmirDataTable);

    Double[,] Rv = new Double[G, O];
    for (g = 0; g < G; g++)
        for (o = 0; o < O; o++)
            Rv[g, o] = int.Parse(AmirDataTable.Rows[g][o]+ "");

    

 
    DataNumOfmachine = new OleDbDataAdapter("select * from [NumOfmachine$]", Amir);
    //DataNumOfmachine.Fill(AmirDataSet);
    DataNumOfmachine.Fill(AmirDataTable);
    
    int[] NumOfmachine = new int[S];
    for (s = 0; s < S; s++)
        NumOfmachine[s] = int.Parse(AmirDataTable.Rows[0][s] + "");


Что я уже пробовал:

Как я могу выбрать разные листы Excel?

Richard MacCutchan

"select * from [NumOfmachine$]"
Просто используйте правильное имя листа в своем SQL-операторе.

Amir2018

как правильно назвать лист?

[no name]

Убедитесь, что в запросе select для второго рабочего листа указано правильное имя рабочего листа. Кроме того, почему вы сбрасываете данные в ту же таблицу, содержащую ранее заполненные данные рабочего листа, Если вам нужно обязательно сделать ее нулевой, прежде чем назначать вторые данные рабочего листа или создавать отдельную таблицу для нового рабочего листа.

1 Ответов

Рейтинг:
7

Maciej Los

Если вы хотите перечислить листы Excel с помощью OleDb, вы можете использовать Метод oledbconnection.Метод GetSchema (String) (System.Data.Для oledb)[^]

Использование:

string sFileName = @"FullFileNmae.xlsx";
string sConStr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=YES';", sFileName);

using (OleDbConnection connection = new OleDbConnection(sConStr))
{
    connection.Open();
    DataTable dt = new DataTable();
    dt = connection.GetSchema("TABLES");
    var sheets = dt.AsEnumerable()
        .Select(x=>x.Field<string>("TABLE_NAME"))
        .ToList();

}


Приведенный выше код должен возвращать список имен листов, например:
Sheet2$ 
Sheet3$ 
Sheet1$


Удачи вам!


Amir2018

Большое спасибо

Maciej Los

Всегда пожалуйста