Динамически анализировать таблицу Excel (диапазон ячеек не указан, так как расположение данных на листе может динамически меняться)

#c# #excel

#c# #excel

Вопрос:

Я использую C#.NET 3.5 в VS2010 на компьютере с Win 7. У меня есть таблица Excel, и я хочу извлечь хранящиеся в ней данные. Я знаю, как анализировать Excel при заданном диапазоне ячеек. Здесь мы подключаемся с помощью OLEDB, даем команду SQL и сопоставляем это с a DataTable , затем получаем доступ к данным.

 select * from [sheetname$A2:N50]   
  

где «sheetname» — это название листа Excel, а «$ A2: N50» — диапазон ячеек.

НО, НО, мои требования совершенно другие.

Я не могу жестко закодировать диапазон ячеек, как указано выше, потому что расположение ячеек данных может динамически меняться. Например: данные, хранящиеся в ячейке A20, могут быть изменены на C14 при самом следующем выполнении.

Мне нужно проанализировать мою таблицу Excel на основе поиска по некоторым ключевым словам. Я имею в виду, что я должен выполнить поиск по ключевому слову «XYZ», а затем проанализировать таблицу чуть ниже нее. Это ключевое слово может менять свою позицию при каждом выполнении.

Поскольку я не знаю диапазон ячеек, я даже не могу получить данные Excel в DataTable , используя приведенный выше запрос.

Ответ №1:

Вместо выбора из диапазона ячеек вы можете заполнить все данные в datatable и запросить из этого.

 DataTable dt = new DataTable();
try
{
   OleDbConnection con = new OleDbConnection(string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=yes;IMEX=1""", excelPath));
   OleDbDataAdapter da = new OleDbDataAdapter("select * from [sheetname$]", con);

   da.Fill(dt);
}
catch (Exception ex)
{
   MessageBox.Show(ex.Message);
   return;
}
//now you can use dt DataTable
foreach (DataRow dr in dt.Rows)
{
  //....
}
  

надеюсь, это поможет…