Работа с Excel в 1С 8
Импорт данных в 1С из Microsoft Excel
Вопросы по операциям импорта и экспорта данных между системами 1С и Excel возникают достаточно неоднократно при активной работе с различными источниками информации. Обработка по работе с Excel файлами рассмотренная в данной статье позволяет загрузить сведения из выбранного файла в табличную часть формы для последующей обработки информации уже внутри 1С Предприятия (автоматизированное создание документов, автоматическое заполнение справочников и регистров сведений и т.д.).
Описание алгоритма загрузки из Excel в 1С
В обработке описано три функции, формулировка которых имеется возможность прочитать, скачав бесплатную демонстрационную версию. При нажатии кнопки “Загрузить” происходит создание COM Объекта для связи с приложением Excel, далее открывается выбранный файл. По умолчанию обработка будет использовать Лист 1 открытой книги. Дан пример последовательного чтения xls или xlsx файла по строкам. В примере определены три столбца – Артикул, Описание, Цена. Именно такие колонки чаще всего встречаются в прайс-листах, для импорта которых и может быть полезна эта заготовка.
Исходный код процедуры 1С для загрузки XLS файла:
Процедура ЧтениеXLSФайла(Элемент)
Если ПустаяСтрока(ИмяФайла) Тогда
Предупреждение(“Для запуска обработки необходимо предварительно выбрать файл Microsoft Excel.”);
Возврат;
КонецЕсли;
Попытка
// Загрузка Microsoft Excel
Состояние(“Загрузка Microsoft Excel…”);
ExcelПриложение = Новый COMОбъект(“Excel.Application”);
Исключение
Сообщить(“Ошибка при загрузке Microsoft Excel.” + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
Попытка
// Открытие файла Microsoft Excel
Состояние(“Открытие файла Microsoft Excel…”);
ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
Исключение
Сообщить(“Ошибка открытия файла Microsoft Excel.” + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
Попытка
// Обработка файла Microsoft Excel
Состояние(“Обработка файла Microsoft Excel…”);
// Читаем данные первого листа книги
ExcelЛист = ExcelФайл.Sheets(1);
// Определить количество строк и колонок выбранного листа книги Excel
xlCellTypeLastCell = 11;
ExcelПоследняяСтрока = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row;
ExcelПоследняяКолонка = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Column;
Исключение
Сообщить(“Ошибка открытия листа №1 Microsoft Excel.” + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
// Закрыть COM соединение для экономии памяти
ExcelПриложение.Quit();
КонецПопытки;
// Создание описателя типов для таблицы значений
КЧ = Новый КвалификаторыЧисла(15,2);
КС = Новый КвалификаторыСтроки(50);
Массив = Новый Массив;
Массив.Добавить(Тип(“Строка”));
ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
Массив.Очистить();
Массив.Добавить(Тип(“Число”));
ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
// Очистить предыдущие значения
ТаблицаДокумента.Очистить();
ТаблицаДокумента.Колонки.Очистить();
// Создать колонки табличного документа
ТаблицаДокумента.Колонки.Добавить(“Номер”,ОписаниеТиповС,”Номер”,5);
ТаблицаДокумента.Колонки.Добавить(“Артикул”,ОписаниеТиповС,”Артикул”,11);
ТаблицаДокумента.Колонки.Добавить(“Описание”,ОписаниеТиповС,”Описание”,25);
ТаблицаДокумента.Колонки.Добавить(“Цена”,ОписаниеТиповЧ,”Цена”,6);
// Последовательное чтение строк с выбранного листа
Для Строка = 1 По ExcelПоследняяСтрока Цикл
// Обработка нажатия Ctrl + Break
ОбработкаПрерыванияПользователя();
// Добавить данные в табличную часть экранной формы
Стр=ТаблицаДокумента.Добавить();
Стр.Номер = Строка;
Попытка
Стр.Артикул = ExcelЛист.Cells(Строка, 1).Value;
Стр.Описание = ExcelЛист.Cells(Строка, 2).Value;
Стр.Цена = ExcelЛист.Cells(Строка, 3).Value;
Исключение
// Не редко происходит ошибка конвертации отдельной ячейки документа
Сообщить(“Ошибка чтения строки файла Microsoft Excel.” + Строка + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
// Отобразить информацию о ходе выполнения обработки
Состояние(“Обработка файла Microsoft Excel : ”
+ “строка ” + Строка + ” из ” + ExcelПоследняяСтрока);
КонецЦикла;
// Закрыть COM соединение для экономии памяти
ExcelПриложение.Quit();
// Отобразить результаты загрузки в форме элемента
ЭлементыФормы.ТаблицаДокумента.Значение = ТаблицаДокумента;
ЭлементыФормы.ТаблицаДокумента.СоздатьКолонки();
КонецПроцедуры // ЧтениеXLSФайла(Элемент)