Несколько способов работы с Excel в 1С
В этой статье расскажу о нескольких способах работы с таблицами Excel.
Для примера будем заполнять таблицу:
Используя заполненный файл Excel:
Contents
Работа с таблицами Excel через COMОбъект
Способ подойдет если установлен Excel. Может выполняться на клиенте и на сервере. Из плюсов – можно использовать методы Excel, из минусов – выполняется долго.
В этом варианте необходимо подключиться к приложению Excel, с помощью него открыть файл, определить лист. Далее по выбранному листу пробегаемся по всем строками (колонкам) и получаем значения ячеек. Обязательно закрываем и выходим из Excel.
Таблица.Очистить();
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.DisplayAlerts = 0;
Excel.Visible = 0;
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
ExcelBook = Excel.Workbooks.Open(Путь);
КоличествоСтраниц = ExcelBook.Sheets.Count;
Если КоличествоСтраниц = 0 Тогда
Возврат;
КонецЕсли;
Лист = ExcelBook.Sheets(1);
КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
Для НомерСтроки = 2 По КоличествоСтрок Цикл
Стр = Таблица.Добавить();
Стр.Код = Лист.Cells(НомерСтроки, 1).Value;
Стр.Наименование = Лист.Cells(НомерСтроки, 2).Value;
Стр.Количество = Лист.Cells(НомерСтроки, 3).Value;
Стр.Цена = Лист.Cells(НомерСтроки, 4).Value;
КонецЦикла;
Excel.Workbooks.Close();
Excel.Application.Quit();
Работа с таблицами Excel через Внешний источник данных
Необходимо добавить внешний источник данных в конфигурацию, и возможно установить драйвер Microsoft Excel Driver для работы с Excel.
Указываем параметры и устанавливаем соединение до нашего файла. Далее запросом к внешнему источнику получаем данные из таблицы Excel.
Таблица.Очистить();
ПараметрыПодключения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыПодключения.СтрокаСоединения = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" + Путь + ";";
ВнешниеИсточникиДанных.Excel.УстановитьОбщиеПараметрыСоединения(ПараметрыПодключения);
ВнешниеИсточникиДанных.Excel.УстановитьСоединение();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ExcelТаблицаТаблица1.Код КАК Код,
| ExcelТаблицаТаблица1.Наименование КАК Наименование,
| ExcelТаблицаТаблица1.Количество КАК Количество,
| ExcelТаблицаТаблица1.Цена КАК Цена
|ИЗ
| ВнешнийИсточникДанных.Excel.Таблица.Таблица1 КАК ExcelТаблицаТаблица1";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(Таблица.Добавить(), Выборка);
КонецЦикла;
Работа с таблицами Excel через Табличный документ
Создаем переменную ТабличныйДокумент, с помощью метода Прочитать() заполняем табличный документ данными из таблицы Excel. Далее, как с работой через COMОбъект, пробегаемся по всем строками (колонкам) и получаем значения ячеек. Работает быстро и сделано средствами 1С.
Таблица.Очистить();
ТабДок = Новый ТабличныйДокумент;
Попытка
ТабДок.Прочитать(Путь);
Исключение
Возврат;
КонецПопытки;
КоличествоСтрок = ТабДок.ВысотаТаблицы;
Для НомерСтроки = 2 По КоличествоСтрок Цикл
Стр = Таблица.Добавить();
Стр.Код = ТабДок.Область("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 1).Текст;
Стр.Наименование = ТабДок.Область("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 2).Текст;
Стр.Количество = ТабДок.Область("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 3).Текст;
Стр.Цена = ТабДок.Область("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 4).Текст;
КонецЦикла;
Работа с таблицами Excel через Табличный документ (альтернативный способ)
Иногда пользователям удобнее загрузить только некоторую часть таблицы, а не загружать файл целиком. Для этого на форме добавляем реквизит ТабличныйДокумент, ставим флажки для возможности редактирования и отображения сетки.
В процедуре ПриСозданииНаСервере() формы заполняем шапку табличного документа (также можно настроить шрифта и вывод рамок):
ТабДок.Область("R1C1").Текст = "Код";
ТабДок.Область("R1C2").Текст = "Наименование";
ТабДок.Область("R1C3").Текст = "Количество";
ТабДок.Область("R1C4").Текст = "Цена";
Пользователь в отрытом окне Excel выделяет нужные ячейки, копирует их, затем вставляет в табличный документ и нажимает кнопку «Загрузить».
При нажатии на кнопку «Загрузить» пробегаемся по всем строками (колонкам) и получаем значения ячеек. Как и в предыдущем варианте, отличие в заполнении табличного документа – в этом варианте его заполняет пользователь.
Таблица.Очистить();
КоличествоСтрок = ТабДок.ВысотаТаблицы;
Для НомерСтроки = 2 По КоличествоСтрок Цикл
Стр = Таблица.Добавить();
Стр.Код = ТабДок.Область("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 1).Текст;
Стр.Наименование = ТабДок.Область("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 2).Текст;
Стр.Количество = ТабДок.Область("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 3).Текст;
Стр.Цена = ТабДок.Область("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 4).Текст;
КонецЦикла;
Надеюсь, что статья оказалась полезной и пригодится для реализации в задачах.
Comments
So empty here ... leave a comment!