// Функция возвращает таблицу значений ТЗ из данных файла Excel
//
// ПутьКФайлу (строка) - полный путь к файлу Excel
// ИмяНомерСтраницы - имя (строка) или порядковый номер (число) страницы файла Excel
// Заголовок (булево) - является ли первая строка строкой заголовка. Если Истина, то колонки будущей ТЗ проименуются из строки заголовка Excel, если Ложь, то колонки проименуются системно "F1", "F2" и т.д
// ПерваяСтрока (число) - номер первой строки считывания с листа Excel
// ВАЖНО!!! Типы колонок будущей ТЗ будут определяться типом первой строки данных Excel (именно данных, не заголовка). Поэтому важно соблюдать в Excel тип колонок данных
Функция ПолучитьТЗИзEXCEL(ПутьКФайлу, ИмяНомерСтраницы, Заголовок = Истина, ПерваяСтрока = 0) Экспорт
ТЗ = Новый ТаблицаЗначений;
#Если Клиент Тогда
Состояние("Подключение к файлу Excel...");
#КонецЕсли
//
Попытка
Эксель = Новый COMОбъект("Excel.Application");
Версия = СтрПолучитьСтроку(СтрЗаменить(Эксель.Version, ".", Символы.ПС), 1);
Исключение
СообщениеТекста("Ошибка подключения к "+ПутьКФайлу+" : "+ОписаниеОшибки(),,СтатусСообщения.Важное);
Возврат ТЗ;
КонецПопытки;
//
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
// Выбираем данные запросом из таблицы файла по имени страницы
Если ТипЗнч(ИмяНомерСтраницы) = Тип("Число") Тогда
Лист = Книга.WorkSheets(ИмяНомерСтраницы);
ИмяСтраницы = Лист.Name;
Иначе
ИмяСтраницы = ИмяНомерСтраницы;
КонецЕсли;
//
// Определим диапазон данных Excel
ПослЯчейка = СтрЗаменить(Книга.WorkSheets(ИмяСтраницы).Cells(1,1).SpecialCells(11).Address, "$", "");
//
Эксель.Application.Quit();
//
Эксель = неопределено;
Книга = неопределено;
Лист = неопределено;
// Подлючаемся
Connection = Новый COMОбъект("ADODB.Connection");
Если Версия = "12" ИЛИ Версия = "14" Тогда
СтрокаПодключения ="Provider =Microsoft.ACE.OLEDB.12.0;Data Source="+ПутьКФайлу+";Extended Properties=""Excel 12.0 Xml;HDR="+?(Заголовок,"YES","NO")+";IMEX=1""";
Иначе
СтрокаПодключения ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ПутьКФайлу+";Extended Properties=""Excel 8.0;HDR="+?(Заголовок,"YES","NO")+";IMEX=1""";
КонецЕсли;
Попытка
Connection.Open(СтрокаПодключения);
Исключение
СообщениеТекста("Ошибка подключения!"+ОписаниеОшибки(), ,СтатусСообщения.ОченьВажное);
Возврат ТЗ;
КонецПопытки;
Command=Новый COMОбъект("ADODB.Command");
Command.ActiveConnection=Connection;
Command.CommandText = ?(ПерваяСтрока = 0, "Select * From [" + ИмяСтраницы + "$]", "Select * From [" + ИмяСтраницы + "$A" + ПерваяСтрока + ":" + ПослЯчейка + "]");
Попытка
Записи=Command.Execute();
Исключение
СообщениеТекста("Ошибка при выполнении запроса!"+ОписаниеОшибки(), ,СтатусСообщения.ОченьВажное);
Возврат ТЗ;
КонецПопытки;
Для НомерПоля = 0 По Записи.Fields.Count-1 Цикл
СтрКолонка = Строка(Записи.Fields.Item(НомерПоля).Name);
СтрКолонка = СтрЗаменить(СтрКолонка,"№","Num");
НедопустимыеСимволы = " ~`!@""#№$;%^:&?*()-+=/\|.,";
Для i = 1 По СтрДлина(НедопустимыеСимволы) Цикл
СтрКолонка = СтрЗаменить(СтрКолонка, Mid(НедопустимыеСимволы, i, 1), "_")
КонецЦикла;
ИмяКолонки = СокрЛП(СтрКолонка);
ТЗ.Колонки.Добавить(ИмяКолонки, , СтрКолонка);
КонецЦикла;
Пока НЕ Записи.EOF() Цикл
НоваяСтрока = ТЗ.Добавить();
Для НомерПоля = 0 По Записи.Fields.Count-1 Цикл
НоваяСтрока[НомерПоля] = Записи.Fields(Записи.Fields.Item(НомерПоля).Name).Value;
КонецЦикла;
Записи.MoveNext();
КонецЦикла;
Command = Неопределено;
Записи = Неопределено;
Возврат ТЗ;
КонецФункции
Функция получения таблицы значений из файла Excel
08.06.12
Разработка - Универсальные функции
Функция получения таблицы значений из файла Excel. Использует запрос в среде самого Excel.
Параметры функции:
ПутьКФайлу (строка) - полный путь к файлу Excel
ИмяНомерСтраницы - имя (строка) или порядковый номер (число) страницы файла Excel
Заголовок (булево) - является ли первая строка строкой заголовка. Если Истина, то колонки будущей ТЗ проименуются из строки заголовка Excel, если Ложь, то колонки проименуются системно "F1", "F2" и т.д
ПерваяСтрока (число) - номер первой строки считывания с листа Excel
ВАЖНО!!! Типы колонок будущей ТЗ будут определяться типом первой строки данных Excel (именно данных, не заголовка). Поэтому важно соблюдать в Excel тип колонок данных
Функцию достаточно разместить в общем модуле своей конфигурации.
Параметры функции:
ПутьКФайлу (строка) - полный путь к файлу Excel
ИмяНомерСтраницы - имя (строка) или порядковый номер (число) страницы файла Excel
Заголовок (булево) - является ли первая строка строкой заголовка. Если Истина, то колонки будущей ТЗ проименуются из строки заголовка Excel, если Ложь, то колонки проименуются системно "F1", "F2" и т.д
ПерваяСтрока (число) - номер первой строки считывания с листа Excel
ВАЖНО!!! Типы колонок будущей ТЗ будут определяться типом первой строки данных Excel (именно данных, не заголовка). Поэтому важно соблюдать в Excel тип колонок данных
Функцию достаточно разместить в общем модуле своей конфигурации.