Чтение данных из таблиц Excel

Многие материалы которые я здесь описываю, я размещаю для самого себя, в основном чтобы мучительно долго не вспоминать как же оно делается и вновь пытать поисковики запросами.
На сей раз опишу простой пример доступа и выборки данных из таблиц Excel в C#. На днях пришлось сим заниматься и в очередной раз вспоминать как оно делается попроще, для больших задач с кучей разных наворотов информации в интернете много. А надо то оно, как обычно бывает, совсем простенько чтоб решало поставленную задачу.

Итак приступим:

Первым делом добавляем в наш проект (Add References...)
Microsoft.Office.Interop.Excel

Далее добавляем на форму:
TextBox — в него будем вводить номер столбца.
RichTextBox — в него выведем прочитанные из эксельки данные.
Button — по этой кнопочки всё выполняется.
OpenFileDialog — для выбора файла xls.

Далее в обработчике события нажатия кнопки пишем такой код:
//Открываем файл Экселя
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
  //Создаём приложение.
  Microsoft.Office.Interop.Excel.Application ObjExcel = new Microsoft.Office.Interop.Excel.Application();
  //Открываем книгу.                                                                                                                                                        
  Microsoft.Office.Interop.Excel.Workbook ObjWorkBook = ObjExcel.Workbooks.Open(openFileDialog1.FileName, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
  //Выбираем таблицу(лист).
  Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;
  ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1];

  //Очищаем от старого текста окно вывода.
  richTextBox1.Clear();

  for (int i = 1; i < 101; i++)
    {
    //Выбираем область таблицы. (в нашем случае просто ячейку)
    Microsoft.Office.Interop.Excel.Range range = ObjWorkSheet.get_Range(textBox1.Text + i.ToString(), textBox1.Text + i.ToString());
    //Добавляем полученный из ячейки текст.
    richTextBox1.Text = richTextBox1.Text + range.Text.ToString()+"\n";
    //это чтобы форма прорисовывалась (не подвисала)...
    Application.DoEvents();
    }

   //Удаляем приложение (выходим из экселя) - ато будет висеть в процессах!
   ObjExcel.Quit();
}


Вот собственно и всё, должно работать.
Исходник можно скачать здесь: ExcelExamle.rar

P.S.
Вот здесь пример того как делать обратное (выводить данные в Excel):
http://kbss.ru/blog/lang_c_sharp/39.html


2 комментария

avatar
Доброго времени суток.
А можно целый столбец Excel забить в ListBox? Ну или сразу ячейку-список из Excel?
avatar
Первое что приходит в голову и самое простое, добавить вот это в цикле:
listBox1.Items.Add(range.Text.ToString());

А может быть лучше будет считать данные в DataTable и увязать его через DataSet с ListBox.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.