Каталог решений - Функция получения таблицы значений из файла Excel

Функция получения таблицы значений из файла Excel

Функция получения таблицы значений из файла Excel

В наличии

Функция получения таблицы значений из файла Excel. Использует запрос в среде самого Excel.
Параметры функции:
ПутьКФайлу (строка)  — полный путь к файлу Excel
ИмяНомерСтраницы     — имя (строка) или порядковый номер (число) страницы файла Excel
Заголовок (булево)   — является ли первая строка строкой заголовка. Если Истина, то колонки будущей ТЗ проименуются из строки заголовка Excel, если Ложь, то колонки проименуются системно "F1", "F2" и т.д
ПерваяСтрока (число) — номер первой строки считывания с листа Excel

ВАЖНО!!! Типы колонок будущей ТЗ будут определяться типом первой строки данных Excel (именно данных, не заголовка). Поэтому важно соблюдать в Excel тип колонок данных

Функцию достаточно разместить в общем модуле своей конфигурации.

Категория:

Описание

// Функция возвращает таблицу значений ТЗ из данных файла 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 = Неопределено;
   
Записи  = Неопределено;

    Возврат ТЗ;

КонецФункции

has been added to your cart:
Оформление заказа