gifts2017

Быстрая загрузка данных из Excel в 1С 8.1 (8.2) с помощью SQL запроса

Опубликовал Александр (Alantal) в раздел Обмен - Загрузка и выгрузка в Excel

Обработка/алгоритм для быстрой выборки данных для загрузки из Excel в 1С 8.1 (8.2)

При загрузке данных из Excel в 1С 8 более-менее штатными средствами чтение данных происходит медленно. Но когда надо загрузить много данных и быстро, то можно воспользоваться прямым SQL запросом к Excel. Он выполняется в разы быстрее.

Обработка настроена на загрузку данных из MS Excel 97 и 2003 (и выше) версий. Загружаются данные в таблицу значений, потом их можно дальше обрабатывать.

Основной алгоритм:

    СтрПодключения = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Файл  + ";Extended Properties=Excel 8.0;";    //для Excel 97
    СтрПодключения2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Файл  + ";Extended Properties=Excel 8.0;";    //для Excel 2003 (или наоборот?)
    
    ЕстьОшибкаПодключения = Ложь;
    Connection = Новый COMОбъект("ADODB.Connection");
    Connection.ConnectionString =  СтрПодключения;

    Попытка
        Connection.Open();
    Исключение
        ЕстьОшибкаПодключения = Истина;
    КонецПопытки;
    
    Если ЕстьОшибкаПодключения Тогда
        Connection.ConnectionString =  СтрПодключения2;
        Попытка
            Connection.Open();
        Исключение
            Сообщить ("Проблемы с подключением к SQLserver" );
            Возврат;
        КонецПопытки;
    КонецЕсли;    
    
    ТекстЗапроса = "SELECT * FROM [A"+ПерваяИнформационнаяСтрокаЭкселя+":BB]";    
    //тут можно указать и название листа типа "SELECT * FROM [Sheet1!A:BB]"
    //можно указать условие SELECT * FROM [A1:BB] where [ИНН]=""543400114477""";
    //Но надо помнить, при выборке Excel называет столбцы по значению в первой строке диапазона.
    //Если значения нет - то название столбца будет F1, F2 и т.д.

    Запрос = Новый COMОбъект("ADODB.Recordset");
    Запрос.Activeconnection = Connection;
    Попытка
        Запрос.Open(ТекстЗапроса);
    Исключение
        Сообщить ("Проблемы с выполнением запроса к SQL");
        Возврат;
    КонецПопытки;

более подробно - в обработке.

Скачать файлы

Наименование Файл Версия Размер
ЗагрузкаИзЕксельВ82.epf 166
.epf 8,18Kb
20.06.12
166
.epf 8,18Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Ийон Тихий (cool.vlad4) 20.06.12 21:11
загрузка Excel ...еще одна...
2. sai_ NT (sai_NT) 20.06.12 21:13
Если бы был раздел Для новичков, то публикации нашлось бы в нем место.
3. Annett Могилевская (Annett) 20.06.12 21:29
Вы бы сначала хоть одну публикацию выложили, а потом бы критиковали.
4. sai_ NT (sai_NT) 20.06.12 21:37
(3) Annett, учитесь адекватно воспринимать конструктивную критику, в жизни это необходимый скилл.

p.s.
Не придерживаюсь мнения что лучше написать что-то чем ничего.
5. Annett Могилевская (Annett) 20.06.12 21:51
Ну это не конструктивная критика, в том то и дело.
6. sai_ NT (sai_NT) 20.06.12 21:55
(5) Annett, иногда важнее человека заставить подумать, чем объяснить все.
7. Ийон Тихий (cool.vlad4) 20.06.12 21:56
(5) какая может быть конструктивная критика, когда это публиковали тысячу раз http://infostart.ru/catalog/?q=%E7%E0%E3%F0%F3%E7%EA%E0+excel , http://infostart.ru/catalog/?q=excel+ado
8. shuhard (shuhard) 20.06.12 21:58
(5)
Ну это не конструктивная критика

получи конструктивную:
- строка подключения не полноценная, в ней нет IMEX и половину xls файлов прочитать не удастся
- в обработке нет автомата определения имени первого листа
9. Annett Могилевская (Annett) 20.06.12 22:03
10. psih12 21.06.12 10:36
Автор должен был ещё предупредить, что:
1)файл Excel, из которого считывается информация, должен быть закрыт.
2) Бывает считывание информации с ошибками
3) Подобных статей в инете навалом, например: http://kb.mista.ru/article.php?id=865
11. Доржи Балбаров (Angeros) 22.06.12 13:40
Все классно тока в народе этот метод называется загрузка из екселя через ADO.
12. Serg Kondrasgov (SergDi) 27.06.12 10:24
ага, можно как загружать так и выгружать :)
13. Eugeneer (Eugeneer) 07.09.12 11:58
14. Алексей Черданцев (scanner1980) 03.03.13 11:59
Хорошо и быстро работает.

При выборе файла желательно чтоб отбор по типу стоял.

Было бы неплохо видеть выбор куда выводить в таблицу значений или табличный документ. Ну а можно и стразу в регистр справочник ))
15. Al Ul (alul) 05.02.15 12:50
(4) sai_NT, А в чем "конструктив"? То что у автора низкий рейтинг еще ни о чем не говорит.
У Вас на 05.02.2015 я вообще ни одной публикации не вижу - вот это конструктивное замечание.
А когда Вы столкнетесь с необходимостью загрузить/выгрузить из/в Excel"я миллиона три записей, тогда будете сравнивать все "быстрые" пути.
16. Al Ul (alul) 05.02.15 12:55
(7) cool.vlad4, вот тут соглашусь.
Вариантов много, а суть одна. В защиту автора могу сказать только, то что он выложил в свободный доступ текст основного алгоритма,
А значит знающий человек может у же на этом этапе определить "а оно ему надо?"
17. Vitaly Suhorukov (nghtmn_cmth) 04.08.15 16:10
Как наложить условие что ячейка по определенной колонке не равна 0?