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

Обработка/алгоритм для быстрой выборки данных для загрузки из 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");
Возврат;
КонецПопытки;

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

16 Comments

  1. cool.vlad4

    загрузка Excel …еще одна…

    Reply
  2. sai_NT

    Если бы был раздел Для новичков, то публикации нашлось бы в нем место.

    Reply
  3. Annett

    Вы бы сначала хоть одну публикацию выложили, а потом бы критиковали.

    Reply
  4. sai_NT

    (3) Annett, учитесь адекватно воспринимать конструктивную критику, в жизни это необходимый скилл.

    p.s.

    Не придерживаюсь мнения что лучше написать что-то чем ничего.

    Reply
  5. Annett

    Ну это не конструктивная критика, в том то и дело.

    Reply
  6. sai_NT

    (5) Annett, иногда важнее человека заставить подумать, чем объяснить все.

    Reply
  7. cool.vlad4

    (5) какая может быть конструктивная критика, когда это публиковали тысячу раз http://infostart.ru/catalog/?q=%E7%E0%E3%F0%F3%E7%EA%E0+excel , http://infostart.ru/catalog/?q=excel+ado

    Reply
  8. shuhard

    (5)

    Ну это не конструктивная критика

    получи конструктивную:

    — строка подключения не полноценная, в ней нет IMEX и половину xls файлов прочитать не удастся

    — в обработке нет автомата определения имени первого листа

    Reply
  9. Annett

    (8) shuhard, теперь согласна.

    Reply
  10. psih12

    Автор должен был ещё предупредить, что:

    1)файл Excel, из которого считывается информация, должен быть закрыт.

    2) Бывает считывание информации с ошибками

    3) Подобных статей в инете навалом, например: http://kb.mista.ru/article.php?id=865

    Reply
  11. Angeros

    Все классно тока в народе этот метод называется загрузка из екселя через ADO.

    Reply
  12. SergDi

    ага, можно как загружать так и выгружать 🙂

    Reply
  13. scanner1980

    Хорошо и быстро работает.

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

    Было бы неплохо видеть выбор куда выводить в таблицу значений или табличный документ. Ну а можно и стразу в регистр справочник ))

    Reply
  14. alul

    (4) sai_NT, А в чем «конструктив»? То что у автора низкий рейтинг еще ни о чем не говорит.

    У Вас на 05.02.2015 я вообще ни одной публикации не вижу — вот это конструктивное замечание.

    А когда Вы столкнетесь с необходимостью загрузить/выгрузить из/в Excel»я миллиона три записей, тогда будете сравнивать все «быстрые» пути.

    Reply
  15. alul

    (7) cool.vlad4, вот тут соглашусь.

    Вариантов много, а суть одна. В защиту автора могу сказать только, то что он выложил в свободный доступ текст основного алгоритма,

    А значит знающий человек может у же на этом этапе определить «а оно ему надо?»

    Reply
  16. nghtmn_cmth

    Как наложить условие что ячейка по определенной колонке не равна 0?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *