Обработка/алгоритм для быстрой выборки данных для загрузки из 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");
Возврат;
КонецПопытки;
более подробно — в обработке.
загрузка Excel …еще одна…
Если бы был раздел Для новичков, то публикации нашлось бы в нем место.
Вы бы сначала хоть одну публикацию выложили, а потом бы критиковали.
(3) Annett, учитесь адекватно воспринимать конструктивную критику, в жизни это необходимый скилл.
p.s.
Не придерживаюсь мнения что лучше написать что-то чем ничего.
Ну это не конструктивная критика, в том то и дело.
(5) Annett, иногда важнее человека заставить подумать, чем объяснить все.
(5) какая может быть конструктивная критика, когда это публиковали тысячу разhttp://infostart.ru/catalog/?q=%E7%E0%E3%F0%F3%E7%EA%E0+excel , http://infostart.ru/catalog/?q=excel+ado
(5)
получи конструктивную:
— строка подключения не полноценная, в ней нет IMEX и половину xls файлов прочитать не удастся
— в обработке нет автомата определения имени первого листа
(8) shuhard, теперь согласна.
Автор должен был ещё предупредить, что:
http://kb.mista.ru/article.php?id=865
1)файл Excel, из которого считывается информация, должен быть закрыт.
2) Бывает считывание информации с ошибками
3) Подобных статей в инете навалом, например:
Все классно тока в народе этот метод называется загрузка из екселя через ADO.
ага, можно как загружать так и выгружать 🙂
Хорошо и быстро работает.
При выборе файла желательно чтоб отбор по типу стоял.
Было бы неплохо видеть выбор куда выводить в таблицу значений или табличный документ. Ну а можно и стразу в регистр справочник ))
(4) sai_NT, А в чем «конструктив»? То что у автора низкий рейтинг еще ни о чем не говорит.
У Вас на 05.02.2015 я вообще ни одной публикации не вижу — вот это конструктивное замечание.
А когда Вы столкнетесь с необходимостью загрузить/выгрузить из/в Excel»я миллиона три записей, тогда будете сравнивать все «быстрые» пути.
(7) cool.vlad4, вот тут соглашусь.
Вариантов много, а суть одна. В защиту автора могу сказать только, то что он выложил в свободный доступ текст основного алгоритма,
А значит знающий человек может у же на этом этапе определить «а оно ему надо?»
Как наложить условие что ячейка по определенной колонке не равна 0?