Обучающие статьи. Урок - Загрузка данных из Excel

Оглавление
  1. Листинг 1. Загрузка через Excel. Выбор файла
  2. Листинг 2. Загрузка через Excel. Запуск приложения Excel
  3. Листинг 3. Загрузка через Excel. Открытие книги и установка значений колонок
  4. Листинг 4. Загрузка через Excel. Начало обработки листа
  5. Листинг 5. Загрузка через Excel. Обработка строки
  6. Листинг 6. Загрузка через Excel. Закрытие приложения
  7. Листинг 7. Загрузка через Excel. Начало процедуры обработки строк табличной части
  8. Листинг 8. Загрузка через Excel. Поиск по артикулу
  9. Листинг 9. Загрузка через Excel. Поиск по наименованию
  10. Листинг 9.1. Загрузка через Excel. Проверка, есть ли в базе два ключевых реквизита
  11. Листинг 9.2. Загрузка через Excel. Проверка, есть ли в базе два ключевых реквизита
  12. Листинг 9.3. Загрузка через Excel. Создание элемента
  13. Листинг 10. Загрузка через Excel. Запись элемента
  14. Листинг 11. Загрузка через Excel. Создание дополнительных единиц отчетов

Приветствуем читателей нашего сайта. Сегодня мы поговорим о полезной функции BAS - Загрузке данных из Excel и обратной выгрузке.

Достаточно часто программистам BAS нужно выполнять загрузку из Excel файла, например, прайс-листа. Давайте научимся делать эту распространённую задачу.

Создадим внешнюю обработку, для удобства отладки.

Добавим новый реквизит «ИмяФайла» с типом Строка и неограниченной длиной.

Также добавим Табличную часть, для удобства визуализации данных и последующей работы с ними. Добавляем Табличную часть «ТабличнаяЧастьДанные» с реквизитами:

  • «Отметка» с типом Булево. 
  • «Артикул» с типом строка и длиной 10
  • «Номенклатура» с типом строка и длиной 100
  • «Единица измерения» с типом строка и длиной 10
  • «Вид номенклатуры» с типом строка и длиной 50

У нас получилось шесть колонок, «Отметка» поможет пользователю осуществлять контроль загружаемых элементов. Колонка «Артикул» будет связующим звеном, по ней будет происходить поиск номенклатуры в базе. Остальные три колонки со строковыми типами будут содержать данные непосредственно из файла. Эти три колонки-реквизита обязательные реквизиты при создании номенклатуры.

На командную панель табличной части добавим две кнопки «Загрузить из Excel» и «загрузить в базу». В определенных случаях пользователю нужен контроль того что загружать и что нет в базу непосредственно. Для этого мы разделим загрузку на два этапа. Первая будет заполнять таблицу, вторая создавать элементы в базе. Отобразим все наши новые элементы на форме обработки. Должно получиться вот так:

Урок 31. Загрузка из Excel

Теперь немного изменим форму, снимем галочку АвтоКонтекстноеМеню из палитры свойств табличной части, для того, чтобы пользователь не смог добавлять новые элементы сам. Так же установим для всех колонок, кроме «Отметка», галочку «только просмотр» в свойствах.

Так же для удобства отладки сделаем авто сохранение реквизита Имя файла, чтобы нам не приходилось заполнять его после каждого открытия обработки. Для этого установим в свойствах формы флажок «Сохранять значения»«Восстанавливать значения» и укажем наш реквизит.

Урок 31. Загрузка из Excel

Перед тем как мы начнем программировать, давайте создадим файл, из которого мы будем загружать данные. Создаем Excel файл со следующим содержимым:

Урок 31. Загрузка из Excel

Отлично, перейдем к программированию.

Добавим кнопку выбора полю «Имя файла». Это можно сделать в палитре свойств этого поля.

Урок 31. Загрузка из Excel

Добавим обработчик «Начало выбора» для поля «Имя файла»

Урок 31. Загрузка из Excel

Мы перехватим это событие и перед началом выбора добавим свой код, чтобы мы могли открывать файлы только с расширениями *.xls, *.xlsx, а так же обработаем результат выбора, записав в наш реквизит «Имя файла» полный путь к файлу и его название. Смысл этой процедуры в том, чтобы получить диалоговое окно выбора файла windows.

Листинг 1. Загрузка через Excel. Выбор файла

Урок 31. Загрузка из Excel

Рассмотрим этот код:

  • СтандартнаяОбработка = Ложь; Отказываемся от действий обработчика BAS и устанавливаем наши.
  • ДиалогВыбораФайла(); Нужен для работы с диалогом специального вида для открытия файла или нескольких файлов, сохранения файла или выбора каталога. Мы также можем задать различные свойства открытия и фильтры. Что мы и сделали, установили заголовок окна и установили фильтр на файлы с расширением Excel.
  • Диалог.Выбрать() – срабатывает после нажатия кнопки «Открыть» открывшегося диалога. Если вам нужно организовать множественный выбор файлов, то нужно всего лишь запустить цикл, вместо условия «Если» и Реквизит ИмяФайла в таком случае примет тип ТаблицаЗначений.

Итак, сохраним обработку и попробуем открыть Excel файлик нашей обработкой. Запускаем BAS в режиме предприятия. Если ошибок не было, вы должны увидеть:

Урок 31. Загрузка из Excel

Перейдем к обработке данных в файле. Запишем следующий код в процедуру «Загрузить из Excel»:

Листинг 2. Загрузка через Excel. Запуск приложения Excel

Урок 31. Загрузка из Excel

Листинг 3. Загрузка через Excel. Открытие книги и установка значений колонок

Урок 31. Загрузка из Excel

Листинг 4. Загрузка через Excel. Начало обработки листа

Урок 31. Загрузка из Excel

Открыв приложение Excel, открыв книгу и узнав количество листов, мы можем запустить цикл по всем листам и обработать. Далее мы определили количество колонок и строк в листе. И можем начать цикл по строкам листа для их обработки. Обработку строк можно начать с проверок ключевых значений. Т.е. если не заполнено наименование или единица измерения, или вид товара- пропустим эту строчку и сообщим пользователю об этом.

Листинг 5. Загрузка через Excel. Обработка строки

Урок 31. Загрузка из Excel

Для получения значения ячейки при переборе строк листа, нам необходимо указать ее точные координаты. Например «Артикул» был в первой колонке. Начинаем перебор со второй строки, тогда координаты артикула для первой строки с данными будут (2,1), далее (3, 1) и т.д.

После обработки строк и завершения обоих циклов, как по строчного, так и по листам, обязательно закрываем Excel

Листинг 6. Загрузка через Excel. Закрытие приложения

Урок 31. Загрузка из Excel

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

Листинг 7. Загрузка через Excel. Начало процедуры обработки строк табличной части

Урок 31. Загрузка из Excel

Листинг 8. Загрузка через Excel. Поиск по артикулу

Урок 31. Загрузка из Excel

Листинг 9. Загрузка через Excel. Поиск по наименованию

Урок 31. Загрузка из Excel

Листинг 9.1. Загрузка через Excel. Проверка, есть ли в базе два ключевых реквизита

Урок 31. Загрузка из Excel

Листинг 9.2. Загрузка через Excel. Проверка, есть ли в базе два ключевых реквизита

Урок 31. Загрузка из Excel

Листинг 9.3. Загрузка через Excel. Создание элемента

Урок 31. Загрузка из Excel

Теперь предварительно запишем нашу новую номенклатуру, чтобы она создала ссылку на себя в базе. Ссылка нам нужна для дополнительных реквизитов «ЕдиницаХраненияОстатков» и «ЕдиницаДляОтчетов» т.к. их владелец справочник номенклатура.

Листинг 10. Загрузка через Excel. Запись элемента

Урок 31. Загрузка из Excel

Листинг 11. Загрузка через Excel. Создание дополнительных единиц отчетов

Урок 31. Загрузка из Excel

Вот и все. Обработка завершена.

Так же, наша компания проводит обучение по курсам:

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

Если у вас остались вопросы, Вы всегда можете обратиться к нашим аналитикам по телефонам:
(093) 090-70-20
(095) 090-70-20
(068) 090-70-20

( 5 )
Комментарии
tyyze
22.07.2021
Excel.Sheets(1).select(); работает только так а не как у вас
Но в целом спасибо
tyyze
22.07.2021
Нашел несколько ошибкок(недописки в коде) пропустили "записать" ,не указали что доп реквизиты нужно в цикл вкинуть -для начинающих тяжело будет понять
Написать комментарий

Свяжитесь с нами

Если вы хотите получить больше информации, заполните эту форму. Мы свяжемся с вами в ближайшее время.

(073) 090-70-20 (095) 090-70-20 (068) 090-70-20 info@finsoft.ua