воскресенье, 26 сентября 2010 г.

Работа с Excel из C# (забираем из Excel данные)

Итак, начался новый учебный год (с чем кстати всех и поздравляю), появились новые курсы, новые проекты, поэтому продолжу излагать некторые, на мой взгляд интересные, вещи.

Сегодня я хотел бы поговорить о работе с Excel из C#.
Пара коментариев:
1. Я использую VS 2010 и Excel 2007.
2. Как я уже сказал, мне работа с Excel понадобилась в одном из проектов, поэтому примеры будут из этого проекта.



1. Для начала работы с Excel-ем, необходимо добавить ссылку на сборку Microsoft Excel 12.0 Object Library.
2. Подключаем с псевдонимом пространство имен:
using Excel = Microsoft.Office.Interop.Excel;
3. Загружаем в память новый экземпляр приложения:
Excel.Application excelApp = new Excel.Application();
excelApp.Visible = true// Отвечает за то, будет ли видимо приложен
4. Открываем ранее существующий документ:
excelApp.Workbooks.Open(_sourceFile.FullName);
А вот здесь, как уже увидили те кто раньше работали с Excel, радостная новость! Теперь c# поддерживает параметры по умолчанию! И никаких больше "миссинг валуе".
5. Свойство Workbooks, как это не странно, содержит открытые книги. Почитаем с первой страницы, первой открытой книги, строчки в список (да, я имею в виду именно первой, а не нулевой! Пользуясь случаем, передаю пламенный привет раработчикам Visual Basic, начинающих нуманацию элементов массива с 1).
            int row = 1;
            List<List<string>> maping = new List<List<string>>();
            Excel.Worksheet currentSheet = (Excel.Worksheet)excelApp.Workbooks[1].Worksheets[1];
            while (currentSheet.get_Range("A" + row).Value2 != null)
            {
                List<string> tempList = new List<string>();
                for (char column = 'A'; column < 'J'; column++)
                {
                    Excel.Range cell = currentSheet.get_Range(column + row);
                    tempList.Add(сell != null ? cell.Value2.ToString() : "");
                }
                maping.Add(tempList);
                row++;
            }
Вот таким нехитрым способом, мы отмапили из экселевского файла ячеки в двухмерный список, с которым дальше можно и работать, не прибегая, к всяким жутким ухищрениям.
Да, чуть не забыл, проверка в while, проверяет есть ли хоть что-то в первом столбце в текущей строке, если есть, то добро пожаловать в мапинг. если нет, то файл кончился (ну у меня просто файл такой, у вас может быть другое условие разбора. Например, нужно перетащить наперед заданное число строк, или как нибудь еще).
6. Закрываем Excel
excelApp.Quit();

На этом вроде бы и все, но как говорится: Следите за рекламой! В следующей части покажу как генерировать сложную таблицу (объединение ячеек и все такое) с нуля.

З.ы. Спасибо, одному моему коллеге, который напомнил, что надо писать в блог, а то что-то за лето, я действительно, расслабился...

Комментариев нет:

Отправить комментарий