HelpF.pro

Загрузка данных из MS Excel через объект ADODB

Данный метод обладает гораздо большей производительностью и простотой, чем банальный объектный метод через COM соединение.

Все что потребуется это создание 2 объектов
* ADODB.Connection
* ADODB. Recordset

Код 1C v 8.х
 // Выполняет загрузку из файла Excel
// Параметры
//  ПутьКФайлу  - <Строка>            - путь к файлу xls
// Автор: ---%%%Gmix 16.03.2006 12:38:48
// Возвращаемое значение:
//   <Булево>   – Истина загрузка произошла
//                       - Ложь загрузки не было
Функция ВыполнитьЗагрузку(ПутьКФайлу) Экспорт

            Файл=Новый Файл(ПутьКФайлу);

            Если Файл.Существует() Тогда
                        Стр_Файл=Файл.ПолноеИмя;
                        // Отрезаем слеш если он есть в конце пути
                        Стр_Путь=Файл.Путь;
                        Если Прав(Стр_Путь,1)="\" Тогда
                                   Стр_Путь=Лев(Стр_Путь,СтрДлина(Стр_Путь)-1);
                        КонецЕсли;
                     // Строка корнекта
                    Стр_Конект = "Driver={Microsoft Excel Driver (*.xls)};
                    |DriverId=790;
                    |Dbq="+Стр_Файл+";
                    |DefaultDir="+Стр_Путь+";"; 
                        Об_Конект = Новый COMОбъект("ADODB.Connection");
                        Попытка
                                    Об_Конект.Open(Стр_Конект);           
                        Исключение
                                   Сообщить ("Не возможно подключится к Microsoft Excel Driver!!!
                                   |Возможно файл ["+Стр_Файл+"] открыт другим пользователем.");
                                   Возврат Ложь;
                        КонецПопытки;

// формируем запрос
// Здесь есть нюанс первая строка данных всегда будет являться заголовком
// если она пустая то имена клонок формируются следующим образом F<Номер колонки>
               Стр_SQL = "S_elect
                |     F1 as Артикул,
                |     F2 as Наименование,
                |     F3 as ПолноеНаименование
                | FROM [A1:AZ100000]
                | WHERE ((F1 Is Not Null) AND (F1 <>''))";
                        Об_РекордСет = Новый COMОбъект("ADODB.Recordset");

                        Попытка
                                   Об_РекордСет=Об_Конект.Execute(Стр_SQL);
                        Исключение
                                   Сообщить("Не удадлось выполнить запрос к файлу Excel
                                   |"+ ОписаниеОшибки(),СтатусСообщения.Важное);
                                   Возврат Ложь;
                        КонецПопытки;

                        Пока НЕ Об_РекордСет.EOF Цикл
                                   // Получаем данные из Об_РекордСет
                                   // ...
                                  Сообщить("");
                                  Для каждого ОБ_Поле Из Об_РекордСет.Fields Цикл
                                     // Пример вывода информации Сообщить(ОБ_Поле.Name,Об_РекордСет.Fields(ОБ_Поле.Name).value); 
                                   КонецЦикла;
                                   // ...
                                   Об_РекордСет.MoveNext();
                        КонецЦикла;

                        Об_Конект.Close();     // Закрываем конект
                        Об_Конект=Неопределено;
                        Об_РекордСет=Неопределено;
                    
                        Возврат Истина;
            Иначе
                        Сообщить("Файл "+ПутьКФайлу+" не найден!");
                        Возврат Ложь;
            КонецЕсли;
КонецФункции   

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/625.html