Выгружаем в EXCEL с помощью ADO

16.06.15

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

Наверное, уже многие знают, что с помощью технологии ADO можно быстро читать большие объемы информации из книг excel. Но ведь с помощью данной технологии можно также легко создавать и заполнять файлы excel.
Не верите? Смотрите ...

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

Наименование Файл Версия Размер
ADO_1s.rar
.rar 3,97Kb
15
.rar 3,97Kb 15 Скачать

Итак, постановка задачи: Создать с помощью механизма ADO файл excel и выгрузить в него из справочника "Номенклатура" код и наименование.

ИмяФайлаЭксель = "D:\Export.xls"; // Имя создаваемого файла

// Собираем строку подключения
СтрокаПодключения = "
|Provider=Microsoft.Jet.OLEDB.4.0;
|Data Source="
+ИмяФайлаЭксель+";
|Extended Properties=""Excel 8.0;HDR=No;"";"
;

// Создаем объект ADOX.Catalog
Catalog = Новый COMОбъект("ADOX.Catalog");
Catalog.ActiveConnection = СтрокаПодключения;

// Создаем таблицу и добавляем в неё два столбца
Table = Новый COMОбъект("ADOX.Table");
Table.Name = "Table";
Table.Columns.Append("Code");
Table.Columns.Append("Description");

// Присоединяем таблицу
Catalog.Tables.Append(Table);
Table = Неопределено;
Catalog = Неопределено;

// Создаем соединение
Connection = Новый COMОбъект("ADODB.Connection");
Connection.Open(СтрокаПодключения);
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;
Command.CommandType = 1;

// Получаем номенклатуру для выгрузки
Запрос = Новый Запрос("
|ВЫБРАТЬ
|    Номенклатура.Код,
|    Номенклатура.Наименование
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура"
);

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

// Заполняем таблицу данными выборки
Пока Выборка.Следующий() Цикл
       
Command.CommandText = "
        |INSERT INTO [Table] VALUES ('"
+Выборка.Код+"','"+Выборка.Наименование+"')";
       
Command.Execute();
КонецЦикла;

// Закрываем соединение
Command = Неопределено;
Connection.Close();
Connection = Неопределено;

Все, готово !

Плюсы данного способа формирования файла excel:

- Большая скорость работы.

- Не требуется запуск самого процесса excel.exe, как это происходит в случае использования OLE-сервера excel.application, а следовательно на него не тратятся ресурсы. Кроме того нет необходимости отслеживать и перехватывать ошибки, связанные с процессом excel.exe, те кто использовал OLE-cоединение - тот поймет о чем я говорю, мало радости когда в случае программной или пользовательской ошибки процесс excel.exe остается висеть в памяти.

- Не требуется самого приложения EXCEL, достаточно что бы на компьютере был установлен OLEDB провайдер Microsoft.Jet.OLEDB.4.0 (он входит в состав практически всех ОС семейства Windows) Это особенно актуально, когда данный код выполняется на сервере 1С:Предприятия, например в качестве регламентного задания.

Минусы тоже имеются:

- Нельзя красиво оформить ячейки - шрифт, рамки и т.д.

P.S. Возможен "комбинированный" способ: с помощью ADO формируется файл, а затем с помощью OLE "наводится марафет".

Выгружаем в EXCEL с помощью ADO (часть 2)

Источник: http://www.obrabotki.com/1s-excel-ado-1/

excel ado

См. также

SALE! 10%

Загрузка номенклатуры из Excel в УТ11, КА 2, ERP 2, Розница 2. Дополнительные реквизиты и сведения, характеристики, картинки, цены, остатки

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка из файлов xls, xlsx, ods, csv, mxl в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 9504 руб.

29.10.2014    210187    620    524    

439

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 11.12.2023, версия 9.5 - 9.9)

13200 руб.

20.11.2015    150729    367    375    

501

Маркетплейсный загрузчик для 12-ти маркетплейсов в "БП 3", "УТ 11", "КА 2", ERP, УНФ

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 Бухгалтерский учет 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы сделаете необходимые документы для Wildberries, OZON, ЯндексМаркет, Мегамаркет, Aliexpress, "Детский мир", Казань-Экспресс, "Леруа Мерлен", ЭНФАНТА (Акушерство), ЛаМода, Летуаль, "Твой дом" в документы "Отчет комиссионера (агента) о продажах" и другие, может работать в "Бухгалтерия 3", "Бухгалтерия 3 КОРП", УТ 11, УНФ, КА 2, ERP. Возможность подключить любые маркетплейсы. Анализ продаж ОЗОН. 30 дней БЕСПЛАТНОГО пользования!

1800 руб.

12.08.2021    31897    226    63    

117

SALE! 20%

Загрузка документов и номенклатуры из Excel в 1С "одним нажатием": УПД, ТОРГ-12, отчеты маркетплейсов, заказы, счета, прайсы

Загрузка и выгрузка в Excel Оптовая торговля Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 Конфигурации 1cv8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

5000 4000 руб.

09.11.2016    214932    925    886    

939

Загрузка данных отчета о реализации товаров из Excel файла СберМегаМаркет

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Загрузка данных отчета о реализации товаров из сервиса СберМегаМаркет для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11 и Управление нашей фирмой, редакция 3.0 в документ "Отчет комиссионера (агента) о продажах".

4800 руб.

07.06.2022    15080    79    0    

60

SALE! 30%

Распознавание и загрузка сканов в 1С "одним нажатием": УПД, ТОРГ-12, накладные, счета, номенклатура, заказы и т.д.

Загрузка и выгрузка в Excel Документооборот и делопроизводство (СЭД) Учет документов Распознавание документов и образов Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная программа для распознавания ЛЮБЫХ СКАНОВ ИЛИ ФОТО ТОВАРНЫХ ДОКУМЕНТОВ в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML и т.д.) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

6000 5520 руб.

04.06.2019    101387    296    173    

312
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. borman 78 02.02.10 07:39 Сейчас в теме
Вот здесь можете посмотреть готовую обработку для УТ, которая создает книгу excel со страницами.
Да простит меня автор за саморекламу 8-) .
2. resear4er@yandex.ru 03.02.10 16:23 Сейчас в теме
Многовато писанины.
Почему бы не воспользоваться напр. таким кодом для выгрузки данных в excel:
ИмяФайлаЭксель = "D:\Export.xls";
Макет = ЭтотОбъект.ПолучитьМакет("Макет");
ТабДок = Новый ТабличныйДокумент;
// Получаем номенклатуру для выгрузки
Запрос = Новый Запрос(" ВЫБРАТЬ
| Номенклатура.Код,
| Номенклатура.Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура");
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
строка = Макет.ПолучитьОбласть("строка");
строка.Параметры.Заполнить(результат);
ТабДок.Вывести(строка);
КонецЦикла;
ТабДок.Записать(ИмяФайлаЭксель,ТипФайлаТабличногоДокумента.XLS97);

Код отработал довольно быстро: 12500 запис. за 12сек.
3. ll13 1047 03.02.10 16:37 Сейчас в теме
(2) А вы попробуйте выполнить свой код на сервере ;)
А Вы что на все случаи жизни макеты рисуете ?
MrFlanker; +1 Ответить
11. markers 274 29.07.10 06:55 Сейчас в теме
(2) Ваш вариант не всегда годен, к примеру проблема с обрезанием кода номенклатуры при сохранении в эксель (обрезает ведущие нули), нельзя сделать ссылку и много ещё чего..
MrFlanker; kuzyara; +2 Ответить
4. resear4er@yandex.ru 03.02.10 16:44 Сейчас в теме
II13 спасибо за ответ! Теперь понял, где данную статью можно применить. :)

P.S Нет, не на все :)
5. dimaxmaster 08.04.10 16:04 Сейчас в теме
Автору огромный +. Не знал "силу маханизма" АDO. Спасибо!
6. dimaxmaster 18.04.10 18:39 Сейчас в теме
Вопрос к автору: выгрузка происходит в строке, т.е. все данные выгружаются как строка. А нет ли возможности выгрузить Число как Число?
7. ll13 1047 18.04.10 19:55 Сейчас в теме
(6) Где-то так :
Table = Новый COMОбъект("ADOX.Table");
Table.Name = "TestTable";

// Допустимые типы
// adDouble = 5 Значение с плавающей точкой двойной точности
// adDAte = 7 Дата
// adCurrency = 6 Денежная сумма
// adBoolean = 11 Булево
// adVarWChar = 202 Символьная строка Unicode, заканчивающаяся NULL
// adLongVarWChar = 203 Длинное строковое значение

Column = Новый COMОбъект("ADOX.Column");
Column.Name = "МойСтолбец";
Column.Type = 5;
Table.Columns.Append(Column);
Column = Неопределено;
Catalog.Tables.Append(Table);

8. dimaxmaster 19.04.10 14:32 Сейчас в теме
(7) Спасибо, все работает
9. PlatonStepan 38 21.04.10 02:20 Сейчас в теме
поясните:
Command.CommandType = 1;

boriskud; +1 Ответить
10. ll13 1047 21.04.10 12:14 Сейчас в теме
(9) Тип передаваемой команды
1 - текстовая команда SQL
Ещё может быть хранимая процедура и по-моему таблица(но точно не помню)
Но с ними не экспериментировал .... если осилите напишите :)
12. Eddmos 25.10.10 14:50 Сейчас в теме
А можно к модулю приблудить позиции
при выводе из номенклатуры
штрих код и стоимость товара????

Возможен ли обратный вариант
загрузка из Excel в 1С
например в "Реализация товаров и услуг: продажа" опять же по тем позициям
код штрих наименование

спс
13. ll13 1047 25.10.10 20:17 Сейчас в теме
(12)
А можно к модулю приблудить позиции
при выводе из номенклатуры
штрих код и стоимость товара????
Разумеется, я не вижу здесь никаких проблем.

Возможен ли обратный вариант
загрузка из Excel в 1С
например в "Реализация товаров и услуг: продажа" опять же по тем позициям
код штрих наименование
На данном сайте таких обработок целая куча...
14. marku 62 20.11.10 00:08 Сейчас в теме
Спасибо Автору ll13 :idea:
вот еще в сети нашел для 2007:
Excel 2007 Connection String
"Provider=Microsoft.ACE.OLEDB.12.0; data source={0}; Extended Properties=\"Excel 12.0;HDR=No;IMEX=1;\"";

СтрокаПодключения = "
|Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source="+ИмяФайлаЭксель+";
|Extended Properties=""Excel 12.0;HDR=No;"";";
16. AlexO 135 16.01.12 02:29 Сейчас в теме
(14) Наверное, HDR=Yes надо ставить.
17. AlexO 135 16.01.12 02:51 Сейчас в теме
(14) хотя нет, это не влияет в данном случае (но я до конца не уверен):
Where "HDR=Yes" means that there is a header row in the cell range
(or named range), so the provider will not include the first row of the
selection into the recordset. If "HDR=No", then the provider will include
the first row of the cell range (or named ranged) into the recordset.
"Где "HDR=Yes" означает, что на открываемом листе есть строка-заголовок в диапазоне ячеек выбранных данных(или именованном диапазоне), т.о. Подключение не включит первую строку набора в Рекордсет (набор записей или набор данных).
Если же "HDR=No", то Подключение включит первую строку диапазона ячеек (или именованного диапазона) в Рекордсет."
15. ratinc 22.02.11 20:05 Сейчас в теме
Созданный таким образом файл затем открывается с предупреждением что он повреждён. Если сохранять xlsx то вообще не открывается
18. Unicorn31 45 24.02.12 22:32 Сейчас в теме
адо использовал раньше для работы с sql базами- работает на ура... как то не приходило в голову , что для 1с можно использовать... спасибо за идею
19. IrinaKostroma 23.08.12 20:34 Сейчас в теме
Все бы хорошо в этом способе выгрузки, но есть проблемка
почему то в созданном файле Excel в начале каждого слова в столбце стоит апостроф

Кто знает можно ли сделать чтобы он не появлялся при выгрузке?
29. hogik 443 08.05.18 21:48 Сейчас в теме
(19)
(26)
Используйте:
К=Строка(8)+СтрЗаменить(Выборка.Код,"'","''");
Н=Строка(8)+СтрЗаменить(Выборка.Наименование,"'","''");
Command.CommandText = "INSERT INTO [Table] VALUES ('"+К+"','"+Н+"')";
Command.Execute();
30. hogik 443 08.05.18 21:52 Сейчас в теме
20. DoctorRoza 04.02.13 16:51 Сейчас в теме
Ох, помогла статья, очень нужная оказалась. :)
21. sick_russian 08.07.13 10:32 Сейчас в теме
А как сделать выгрузку чтобы не создавать файл а открыть для записи существующий?
22. Dim Dimy4 09.04.14 10:21 Сейчас в теме
Столкнулся с проблемой выгрузки из 1С 8 в Excel по ADO.
Задача "Выгружать данные в именованный диапазон ячеек", при чём существует несколько именованных диапазонов ячеек. Расположены они разнообразно на листе.

Пример: заданы несколько именованных диапазонов.
1. Имя диапазона "Дата", адрес диапазона "A1";
2. Имя диапазона "Товар", адрес диапазона "A3:A3000";
3. Имя диапазона "Артикул", адрес диапазона "B3:B3000";
4. Имя диапазона "Количество", адрес диапазона "C3:C3000";
и т.д.

Делаешь поиск диапазона на листе, находит все ок.
Делаешь запись в ячейки диапазона значений, пишет. Но проставляет не первую, вторую, третью, т.д. ячейку адреса диапазона , а первую,вторую, третью, т.д. ячейку столбца.
Например записываешь наименование номенклатуры в диапазон "Товар". Записывается:
Товар1 вместо ячейки "A3" в ячейку "A1";
Товар2 вместо ячейки "A4" в ячейку "A2";
Товар3 вместо ячейки "A5" в ячейку "A3";
и т.д. Кто сталкивался с такой проблемой и какое решение находили?
27. Dim Dimy4 20.04.15 12:49 Сейчас в теме
(22) Dim Dimy4,
пришлось делать через объект COMSafeArray, поищите информацию.
23. Ele1234567 29.04.14 11:18 Сейчас в теме
Очень интересное решение, обязательно нужно попробовать на практике. Сейчас как раз задача по выгрузке данных в регламентном задании в эксель и вот на сервере с этим возникают загвоздки.
24. Vodoley 1 28.07.14 18:47 Сейчас в теме
наткнулся на то, что :
1. после имени листа ставлю $ иначе не находит

2. вопрос - как записать в эксель числовые данные так, чтобы он их и принял как числовые (без треугольничков в углах ячейки, мол число отформатировано как текст ??
25. 1801 19.09.14 18:11 Сейчас в теме
Попробовал - работает, переделал этот шаблон под выгрузку регистра накопления "Продажи" в Excel. (Аналитикам так удобней работать с данными, путем построения в Excel сводных таблиц в различных разрезах.) Большое вам спасибо!

26. 1801 19.09.14 18:26 Сейчас в теме
Вопрос: можно ли вместо апострофа использовать другой разделитель? У нас в справочнике в наименовании товара апостроф иногда встречается и обработка на этих местах спотыкается.
28. UserPro 4 03.12.17 01:57 Сейчас в теме
Замечательно. А как картинку выгрузить в Exsel с помощью ADO ???
user717534; +1 Ответить
Оставьте свое сообщение