#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)
{
//....
}
надеюсь, это поможет…