Функции работы из 1с 8.х с EXCEL

В краткой статье описаны функции для  для работы с ёкселем (оригинал: http://www.infostart.ru/blogs/718/ )
// функция устанавливает связь с EXCEL
// в качестве параметра требуется имя открываемого файла
// в случае удачи возвращает соответствие из обьектов ОЛЕ, в случае не удачи - неопределено
Функция EXCEL_УстановитьСвязь (ИмяФайла)Экспорт
Результат = Неопределено;
#Если Клиент Тогда
Состояние("Идет установка связи, ждите.....");
#КонецЕсли
Попытка
Результат = Новый Соответствие();
BaseOLE = Новый COMОбъект("Excel.Application");
Результат.Вставить("EXCEL", BaseOLE);
ExcelФайл = BaseOLE.WorkBooks.Open (ИмяФайла);
Результат.Вставить("ExcelФайл", ExcelФайл);
МассивЛистов = Новый Массив();
КоличествоЛистов = ExcelФайл.Sheets.Count;
Для е = 1 по КоличествоЛистов Цикл
МассивЛистов.Добавить(ExcelФайл.Sheets(е));
КонецЦикла;
Результат.Вставить("Листы", МассивЛистов);

Исключение
Результат = Неопределено;
#Если Клиент Тогда
Сообщить("Ошибка создания обьекта Microsoft Excel" + ОписаниеОшибки());
#КонецЕсли
КонецПопытки;
Возврат Результат;
КонецФункции

// функция разрывает связь с 1с 7.7
// в качестве параметра требуеться структура созданая при установке соединения
Процедура EXCEL_РазорватьСвязь (Соответстие) Экспорт
Попытка
Соответстие["EXCEL"].DisplayAlerts = 0;
Соответстие["ExcelФайл"].Close();
Соответстие["EXCEL"].DisplayAlerts = 1;
Соответстие["EXCEL"].Quit();
Соответстие["EXCEL"] = Неопределено;
Исключение
#Если Клиент Тогда
Сообщить(ОписаниеОшибки());
#КонецЕсли
КонецПопытки;
КонецПроцедуры


// функция получает данные ячейки и возвращаеть структуру соответствий, или неопределено в случае неудачи
//
// В любом случае возвращаем соостветствие "Значение" и "ЭтоФормула", остальное по флагам
//
Функция EXCEL_ПолучитьЗначениеЯчейки (ExcelЛист, НомерСтроки, НомерКолонки, ПолучатьТекстФормулы = ложь, ПолучатьОформление = ложь)
Результат = Новый Соответствие();
Попытка
ТекущееЗначениеФормулы = ExcelЛист.Cells(НомерСтроки, НомерКолонки).Formula;
Если ТекущееЗначениеФормулы <> "" Тогда
Если Лев(ТекущееЗначениеФормулы, 1) <> "=" Тогда
Результат.Вставить("ЭтоФормула", Ложь);
Результат.Вставить("ЗначениеЯчейки", ExcelЛист.Cells(НомерСтроки, НомерКолонки).value);
Иначе
Результат.Вставить("ЭтоФормула", Истина);
Если Лев(СокрЛП(ExcelЛист.Cells(НомерСтроки, НомерКолонки).text),1) = "#" Тогда
Результат.Вставить("ЗначениеЯчейки", Неопределено);
Иначе
Результат.Вставить("ЗначениеЯчейки", ExcelЛист.Cells(НомерСтроки, НомерКолонки).value);
КонецЕсли;

Если ПолучатьТекстФормулы Тогда
Результат.Вставить("ТекстФормулы", СокрЛП(ТекущееЗначениеФормулы));
КонецЕсли;
КонецЕсли;
Иначе
Результат.Вставить("ЭтоФормула", Ложь);
Результат.Вставить("ЗначениеЯчейки", ExcelЛист.Cells(НомерСтроки, НомерКолонки).value);
КонецЕсли;
Если ПолучатьОформление Тогда
Результат.Вставить("ЦветЯчейки", СокрЛП(ExcelЛист.Cells(НомерСтроки, НомерКолонки).Interior.ColorIndex));
// здесь можно добавить и другие....
КонецЕсли;
Исключение
Результат = Неопределено;
КонецПопытки;
Возврат Результат;
КонецФункции

// функция получает данные ячейки и значение
//
// В любом случае возвращаем соостветствие "Значение" и "ЭтоФормула", остальное по флагам
//
Функция EXCEL_ПолучитьЗначениеЯчейки2 (ExcelЛист, НомерСтроки, НомерКолонки)
Результат = EXCEL_ПолучитьЗначениеЯчейки (ExcelЛист, НомерСтроки, НомерКолонки);
Если Результат = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Результат["ЗначениеЯчейки"];
КонецФункции


//
// пример использования:
//


// будем подключаться
СоответстиеЗагрузки = EXCEL_УстановитьСвязь (ТекущийФайл.ПолноеИмя);
Если СоответстиеЗагрузки = Неопределено тогда
Возврат;
КонецЕсли;
Для каждого ТекущаяСтраница из СоответстиеЗагрузки["Листы"] Цикл
Значение_X1Y1 = EXCEL_ПолучитьЗначениеЯчейки2 (ТекущаяСтраница, 1, 1);
КонецЦикла;