Метод загрузки данных из таблиц Excel в 1С без установки Office

20.06.17

Интеграция - Загрузка и выгрузка в Excel

Импорт данных в 1С:Предприятие 7.7 из Excel через JET.OLEDB или ACE.OLEDB. Данный метод позволяет загружать данные из файлов на ПК, на которых не установлен MS Office.

Скачать исходный код

Наименование Файл Версия Размер
Загрузка данных из Excel (пример обработки)
.ert 32,50Kb
11
.ert 32,50Kb 11 Скачать

Загрузка в 1С:7.7 (далее просто 1С) из Excel, казалось бы, что может быть проще? Создаем объект "Excel.Application", открываем в нем необходимый файл и загружаем все необходимы данные. Но есть одно маленькое но: чтобы создать этот объект, на компьютере должен быть установле Excel. А если Excel-я нет, что делать? Уже несколько раз сталкивался с такими организациями: на компьютерах пользователей, разумеется, стоит все необходимое, в т.ч. и MS Office, нет только 1С, а вот на сервере терминалов все наоборот: только 1С:7.7 и все. На предложение установить хотя бы только Excel отвечают категорическим отказом, мотивируя это проблемами безопасности или отсутствием свободных лицензий, или и тем, и другим. В таком случае открыть файл через объект "Excel.Application" оказывается невозможно, что же делать? Но выход есть! Наша любимая Microsoft все предусмотрела! Чтобы извлечь данные из файлов Excel можно использовать специальные объекты ACE.OLEDB или более старые JET.OLEDB.

Итак, если у Вас возникла необходимость обратится из 1С к книге Excel на машине, где неустановлен этот самый Excel, то порядок действий следующий:

  1. Проверяем, что у нас установлено и каких версий, для этого смотрим в реестре ветку  HKEY_CLASSES_ROOT\Microsoft.ACE.х.х. Если этого раздела нет, то там же может быть такая ветка: HKEY_CLASSES_ROOT\Microsoft.JET.х.х, где "х.х" - это номера версий. Если ничего нет, то гуглим в Яндексе "скачать microsoft ace.oledb" и переходим на сайт Microsoft, где эта штука называется как "Microsoft Access Database Engine 2010 Redistributable", кто не хочет долго искать может сразу скачать по #здесьссылке https://download.microsoft.com/download/f/d/8/fd8c20d8-e38a-48b6-8691-542403b91da1/AccessDatabaseEngine.exe

  2. Переходим к написанию процедуры импорта. Сначала формируем строку подключения. Для JET.OLEDB 4-ой версии она будет выглядеть следующим образом:

    ИмяФайла = "C:\AAA\file123.xls"; //Имя файла, для импорта
    СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + ИмяФайла;
    СтрокаПодключения = СтрокаПодключения + "; Extended Properties = "+"""Excel 8.0"+";HDR=NO;IMEX=1"";";

    А для ACE.OLEDB 12-ой так:

    ИмяФайла = "C:\AAA\file123.xls"; //Имя файла, для импорта
    СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = " + ИмяФайла;
    СтрокаПодключения = СтрокаПодключения + "; Extended Properties = "+"""Excel 12.0"+";HDR=NO;IMEX=1"";";

    Описание тонкостей данных настроек - это тема для отдельной публикации. Для наших целей достаточно тех, что указаны здесь. Но интересующиеся могут воспользоваться поисковыми запросами "подключение к microsoft.jet.oledb" или "подключение к microsoft.Ace.oledb".

  3. Подключаемся к файлу:

        // Подключаемся
    	Екс = СоздатьОбъект("ADODB.Connection");	
    	Екс.Open(СтрокаПодключения); 	//Таблица EXCEL
    

    Файл открыт. Для получения из него данных необходимо будет использовать объект RecordSet, если Вы работали в VB или VBA, то знаете что это такое, для остальных буду в процессе пояснять. Теперь таблица Excel представляется обычной таблицей базы данных, у которой есть строки, есть колонки, чтобы прочитать данные из этой таблицы необходимо сформировать SQL-запрос и передать его объекту RecordSet. Сейчас мы сформируем запрос, который откроет доступ к диапазону строк с 10 до 120 и колонок с A по S:

    НачСтрока = 10; КонСтрока = 120;
    СтрокаЗапроса = "
        |SELECT *
        |FROM [A" + Строка(НачСтрока) + ":S" + Строка(КонСтрока) + "] 
    
        |"; //Выбираются необходимые ячейки листа
    	//Для наложения условия используется синтаксис SQL
    
    //РабЛ	= СоздатьОбъект("ADODB.RecordSet"); Объект этого типа мы сейчас получим
    РабЛ = Екс.Execute(СтрокаЗапроса);

    Последовательно читаем все строки объекта RecordSet с помощью методов MoveFirst (ПолучитьПервуюЗапись) и MoveNext (ПолучитьСледующуюЗапись). Внутри строки перемещаемся с помощью коллекции Fields:

    СтрТекст = "";
    СчСтрок = 0;
    РабЛ.MoveFirst(); //Получить первую строку набора
    Пока Число(РабЛ.EOF()) = 0 Цикл 
    //Выполняем цикл пока флаг окончания набора записей (Метод EOF) 
    //не будет установлен в значение Истина (перебираем строки таблицы)
    
       СчСтрок = СчСтрок + 1;   
       Сообщить(СтрТекст);	                
       СтрТекст = "Строка № " + СчСтрок + ": ";
    		
       Для Сч = 1 По РабЛ.Fields.Count() Цикл 
          //Перебор элементов коллекции Fields (колонки внутри строки)
       
          ТекЗначение = СокрЛП(РабЛ.Fields(Сч - 1).Value);
          СтрТекст = СтрТекст + ТекЗначение + "!";
    			
       КонецЦикла;
       РабЛ.MoveNext(); //Получить следующую строку набора
    
    КонецЦикла; 
    	                       
    Сообщить(СтрТекст);
    //Закрываем объекты Оле
    РабЛ.Close();
    Екс.Close();
    

Вот так, с помощью нехитрых методов и обрывочных знаний по Visual Basic можно обращаться к информации, хранящейся в недоступных, казалось бы, файлах. Если фрагменты представленного здесь кода собрать вместе, то получим процедуру, читающую данные в книге Excel и выводящую их в виде сообщений пользователю. Для тех, кто ценит свое время, прилагаю уже готовую обработку, которая воспроизводит описанные здесь дейтсвия. Её Вы можете взять за основу и доработать под свои нужды.

Импорт эксель excel OLEDB 1C77 1С77 7.7

См. также

Загрузка документов в 1С (7.7) из табличных файлов Excel,OpenOffice,1C,DBF,TXT (обработка)

Файловый обмен (TXT, XML, DBF), FTP Загрузка и выгрузка в Excel Платформа 1С v7.7 Конфигурации 1cv7 Платные (руб)

Обработка решает поставленную задачу по вводу документов, а кроме того обладает важной функцией: настраивается на ассортимент конкретного поставщика, запоминая соответствие между его номенклатурой и «нашей». Т.е. фактически – является самообучающейся системой ввода накладных. У разных поставщиков могут быть накладные различного типа, с разным количеством полей, поэтому для каждого из них может быть сохранена своя собственная настройка диалоговой формы так, что любая поступающая накладная может быть обработана. По отношению к программе "1С:Предприятие 7.7" данное решение является внешними файлами. Для использования данного продукта не требуется вносить изменения в алгоритм существующих программ или используемых конфигураций.

2400 руб.

10.12.2009    76949    58    93    

68

Сводная таблица Excel из 1С

Загрузка и выгрузка в Excel Программист Платформа 1С v7.7 Абонемент ($m)

Сводная таблица Excel из 1С - как сделать ее программно через COM соединение.

1 стартмани

30.07.2021    6314    1    atdonya    1    

2

Загрузка банковской выписки для 1С 7.7 любой конфигурации

Банковские операции Загрузка и выгрузка в Excel Бухгалтер Пользователь Платформа 1С v7.7 Конфигурации 1cv7 Россия Бухгалтерский учет Платные (руб)

Решение предоставляет комплексную загрузку банковской выписки из CSV, XLS, TXT файла в 1С 7.7 любой конфигурации. Позволяет создавать документы выбранного вида, например "Строка выписки банка (приход/расход)", или многострочный табличный документ, например Выписка, для каждой операции из загружаемого файла банковской выписки. Загружает реквизиты документа, а также создаёт контрагентов и другие необходимые элементы справочников.

3588 руб.

29.07.2021    21121    13    22    

14

Выгрузка товаров из 1С:Предприятия 7.7 "Торговля и Склад 9.2" в файл CSV для онлайн кассы МТС

Кассовые операции Оптовая торговля Розничная торговля Загрузка и выгрузка в Excel Бухгалтер Пользователь Оперативный учет 7.7 1С:Торговля и склад 7.7 Бухгалтерский учет Управленческий учет Абонемент ($m)

Данная обработка предназначена для выгрузки файла из программы 1С: Предприятие 7.7 Конфигурации «Торговля и Склад 9.2» в файл CSV для загрузки в кассу МТС. Тестирование проводилось на релизах 937 и 998. В теории должна работать на всех типовых релизах конфигурации «Торговля и Склад 9.2».

1 стартмани

07.02.2021    10084    5    Kuzya_brаtsk    1    

7

Выгрузка товаров из 7.7 для загрузки в личный кабинет АТОЛ для ньюджеров 91Ф, 92Ф и подобных

Оптовая торговля Загрузка и выгрузка в Excel Программист Бухгалтер Пользователь Платформа 1С v7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Бухгалтерский учет Управленческий учет Абонемент ($m)

Выполняет выгрузку товаров (всех, только с признаком в прайсе, только из указанной папочки) с гибкой настройкой выгружаемых данных. Формируется файл в формате XLSX подходящий для прямой удаленной загрузки в кассовый аппарат АТОЛ 91Ф/92Ф и им подобных, имеющих управление через Личный кабинет АТОЛ (lk.atol.ru).

1 стартмани

31.01.2021    8235    2    &-rey    1    

4

Дополнение реквизитов номенклатуры из Эксель в 7.7. Групповое редактирование реквизитов номенклатуры 7.7 в списке

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Программист Пользователь Платформа 1С v7.7 1С:Комплексная 7.7 Управленческий учет Абонемент ($m)

Обработки группового дополнения данных о номенклатуре. Ввод веса и объема существующих товаров вручную в форму таблицы значений и затем запись в справочник Номенклатуры и Единиц. Закачка весов и объемов существующих товаров из Эксель в справочник Номенклатуры и Единиц. Загрузка внешних кодов товаров из Эксель в справочник Номенклатуры. Редактирование внешних кодов товаров в форме списка. Дозаполнение реквизитов существующих товаров из Эксель (ключевые поля - штрихкод, наименование, внешний код).

1 стартмани

11.10.2019    11976    2    ksnik    2    

2

Оптовая торговля. Обработки дистрибьютора для обмена с поставщиками и покупателями через Excel в 1С 7.7

Оптовая торговля Загрузка и выгрузка в Excel Пользователь Платформа 1С v7.7 Конфигурации 1cv7 Оптовая торговля, дистрибуция, логистика Управленческий учет Абонемент ($m)

В данной публикации приведены примеры обработок обмена дистрибьютора с поставщиками и покупателями через Эксель. Создание товаров-новинок. Автоматическое формирование Заказа поставщику по продажам. Заполнение бланка заказа поставщику. Загрузка приходной накладной от поставщика. Загрузка любых справочников из Эксель, например товарных сертификатов. Выгрузка прайслиста в бланк заказа (создание бланка заказа). Загрузка заявки покупателя из произвольного файла Эксель. Загрузка заявки покупателя из бланка заказа.. Для работы требуется установленный MS Excel.

1 стартмани

08.09.2019    16337    10    ksnik    2    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 3125 20.09.16 08:00 Сейчас в теме
Как определить КонСтрока?
2. vadver 40 20.09.16 09:25 Сейчас в теме
(1) CheBurator, вероятно, с помощью ADOX.Catalog, ADOX.Tables
3. aserg 44 21.09.16 07:22 Сейчас в теме
(1) CheBurator, определить количество заполненных строк в файле Excel не открывая самого файла - задача еще та... Можно упростить задачу: задавать значение переменной КонСтрока как заведомо большое, чтобы в диапазон попала вся необходимая информация или предоставить эту возможность самому пользователю, выведя на форму соответствующее поле.
Есть еще 3-ий вариант: считывать информацию из файла в цикле небольшими блоками по N строк в каждом, когда в очередном блоке не оказалось нужной информации - выход из цикла.
4. aserg 44 21.09.16 07:53 Сейчас в теме
На самом деле строку запроса можно составить таким образом, чтобы в него попали все данные или только необходимые, например, если СтрокаЗапроса = "Select * FROM [Лист1$]", то в выборке окажется весь лист с именем "Лист1". Если лист Excel именно таблица, т.е. в первой строке его находятся заголовки столбцов, а ниже - данные, то к нему (листу) можно обращаться как к таблице базы данных с использованием имен столбцов и фильтров. Например запрос "Select * FROM [Лист1$] Where Количество = 2" отфильтрует строки на листе "Лист1" по колонке "Количество" = 2.
Причем меня терзают смутные подозрения, что если в запросе обратиться к пустому листу, то выборка также окажется пустой, но времени на проверку данного подозрения не было. Отпишитесь, у кого будет желание
5. пользователь 13.06.22 22:57
Сообщение было скрыто модератором.
...
6. пользователь 13.06.22 23:33
Сообщение было скрыто модератором.
...
7. пользователь 13.06.22 23:42
Сообщение было скрыто модератором.
...
Оставьте свое сообщение