Каталог решений - Как программисту быстро загрузить данные из Excel

Как программисту быстро загрузить данные из Excel

Как программисту быстро загрузить данные из Excel

В наличии

Встала как-то разовая задача — загрузить данные из Excel в базу…
Идея не новая, на ИС имеются уже готовые подобные разработки, но предлагается сделать самостоятельно. Пригодится в будущем.

Категория:

Описание

Идея не новая, на ИС имеются уже готовые подобные разработки, например

но предлагается сделать то же самое самостоятельно. Пригодится в будущем.

 

Пример из жизни: Принесли листик с именами клиентов и суммами зарплат — нужно внести в базу.

Как быть?

1. Взять чужую готовую разработку (плюс: ничего разрабатывать не надо, можно отдать бухгалтеру на растерзание, минус: как правило, бухгалтер придет к Вам с «просьбой» показать как и что делать… возможно, придется шаманить с настройками — особенно если обмен не удастся).

2. Написать «простенькую» обработку загрузки из Excel через OLE (тут ключевое слово «простенькую»… Помимо наладки обмена, нужно вкратце знать как устроен Excel — и как к нему обращаться. Скорее всего — нужен хотя бы минимальный опыт написания макросов. Хотя примеров более чем достаточно).

3. Простое решение:

Создаем внешнюю обработку, туда вставим табличное поле. Включим показывать заголовки колонок и строк и разрешить редактирование. При работе — нужную таблицу копируем из  Excel в буфер обмена и вставляем в табличный документ. При этом форматирование теряется, но оно нам не особо надо.

Далее на ту же форму кидаем кнопку «Выполнить» (хотя вообще-то эта кнопка уже должна быть создана автоматически) и в процедуре-обработчике описываем цикл по строкам с чтением и выполнением нужных действий:

Процедура КнопкаВыполнитьНажатие(Кнопка)

    ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1;

    НачальнаяСтрока = 2;
    КонечнаяСтрока = ЭлементыФормы.ТабДок.ВысотаТаблицы;

    Док = Документы.КорректировкаЗаписейРегистровНакопления.СоздатьДокумент();
    НовСтр = Док.ТаблицаРегистровНакопления.Добавить();
    НовСтр.Имя = Метаданные.РегистрыНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Имя;
    НовСтр.Представление = Метаданные.РегистрыНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Представление();

    Рег = Док.Движения.ВзаиморасчетыСРаботникамиОрганизаций;

    Для сч=НачальнаяСтрока по КонечнаяСтрока Цикл

        СуммаВзаиморасчетов = СокрЛП(ТабДок.Область(сч, 2).Текст);
        СуммаВзаиморасчетов = Число(СуммаВзаиморасчетов);

        ИмяФизЛица = СокрЛП(ТабДок.Область(сч, 1).Текст);
        Если ИмяФизЛица="" Тогда

            Продолжить;

        КонецЕсли;

        ФизЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию(ИмяФизЛица);
        Если ФизЛицо.Пустая() Тогда

            Сообщить("Физ. лицо не найдено: "+ИмяФизЛица);
            Продолжить;

        КонецЕсли;

        НовЗапись = Рег.ДобавитьПриход(); 
        НовЗапись.Активность = истина;
        НовЗапись.ФизЛицо = ФизЛицо;
        НовЗапись.СуммаВзаиморасчетов = СуммаВзаиморасчетов;

    КонецЦикла;

    Док.ПолучитьФорму().Открыть();

КонецПроцедуры

В принципе, этого достаточно чтобы загрузить данные в документ и показать форму — остальные поля в форме можно заполнить вручную. Можно доработать: вынести на форму поля для заполнения значений при создании конкретного документа, настройку начальной и конечной строк и т.п. Тут как говорится — нет предела совершенству.

Плюсы: пишем все сами — не надо изучать чужой код или что-то настраивать, не требуется знание макросов и устройства Excel (как и сам Excel), не заморачиваемся с OLE-подключением.

Минусы: Универсальностью данное решение не обладает, но как вариант — сделать «по-быстрому» и «на один раз».

Итог: у меня рядом с обработкой «ЗагрузкаИзExcel.epf» со временем накопились обработки, которые делал по-быстрому, копируя ее и изменяя тело цикла «Для«…

 

has been added to your cart:
Оформление заказа