Чтение файла Excel в 1С 8.х может проводиться несколькими способами. Одним из самых простых способов программного чтения файлов Excel в 1С является подключение через COMобъект.
Перед тем как перейти к процедурам чтения файла Excel, нужно найти его адрес. Для этого удобно воспользоваться стандартным диалогом открытия файла. Нужно создать текстовое поле с достаточной длиной (адреса бывают длинные). В обработчике события НачалоВыбора нужно прописать следующую процедуру.
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.ПредварительныйПросмотр = Ложь;
Диалог.Фильтр = "(*.xls)|*.xls";
Если ЗначениеЗаполнено(Файл) Тогда
Диалог.ПолноеИмяФайла= Файл;
КонецЕсли;
Если Диалог.Выбрать() Тогда
Файл= Диалог.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
После этого в реквизите Файл должен находить полный адрес файла Excel.
Допустим, файл содержит две колонки:
- Артикул.
- Наименование товара.
Данные начинаются с 4 строки. Всего строк в файле 5000.
Процедура будет выглядеть так:
Ехсел=Новый COMObject("Excel.Application");
Книга=Ехсел.Workbooks;
Книга.Open(Файл);
ТЗ=новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Артикул");
ТЗ.Колонки.Добавить("Наименование");
Для СчетчикЦикла=4 По 5000 Цикл
НоваяСтрока=ТЗ.Добавить();
НоваяСтрока.Артикул=СокрЛП(Ехсел.Cells(СчетчикЦикла,1).value);
НоваяСтрока.Наименование=СокрЛП(Ехсел.Cells(СчетчикЦикла,2).value);
КонецЦикла;
Ехсел.Application.Quit(); // Если этого не сделать, процесс EXCEL останется в памяти
КонецПроцедуры
Пустые ячейки файла Excel имеют значение Неопределено. Поэтому, если количество строк в файле заранее не известно, но есть уверенность, что записи идут одна за другой и не прерываются пустыми строками, то процедуру можно модифицировать так.
Ехсел=Новый COMObject("Excel.Application");
Книга=Ехсел.Workbooks;
Книга.Open(Файл);
ТЗ=новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Артикул");
ТЗ.Колонки.Добавить("Наименование");
СчетчикЦикла=4;
Пока СокрЛП(Ехсел.Cells(СчетчикЦикла,1).value)<>Неопределено Цикл
НоваяСтрока=ТЗ.Добавить();
НоваяСтрока.Артикул=СокрЛП(Ехсел.Cells(СчетчикЦикла,1).value);
НоваяСтрока.Наименование=СокрЛП(Ехсел.Cells(СчетчикЦикла,2).value);
СчетчикЦикла=СчетчикЦикла+1;
КонецЦикла;
Ехсел.Application.Quit(); // Если этого не сделать, процесс EXCEL останется в памяти
КонецПроцедуры
Кроме того, можно определить количество строк в файле Excel. Это делается так:
Если Версия = "8" тогда
ФайлСтрок = Ехсел.Cells.CurrentRegion.Rows.Count;
ФайлКолонок = Макс(Ехсел.Cells.CurrentRegion.Columns.Count, 13);
Иначе
ФайлСтрок = Ехсел.Cells(1,1).SpecialCells(11).Row;
ФайлКолонок = Ехсел.Cells(1,1).SpecialCells(11).Column;
Конецесли;
После этого можно применять полученные значения количества строк и колонок в коде, аналогичном описанному выше.
Ехсел=Новый COMObject("Excel.Application");
Книга=Ехсел.Workbooks;
Книга.Open(Файл);
Если Версия = "8" тогда
ФайлСтрок = Ехсел.Cells.CurrentRegion.Rows.Count;
ФайлКолонок = Макс(Ехсел.Cells.CurrentRegion.Columns.Count, 13);
Иначе
ФайлСтрок = Ехсел.Cells(1,1).SpecialCells(11).Row;
ФайлКолонок = Ехсел.Cells(1,1).SpecialCells(11).Column;
Конецесли;
ТЗ=новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Артикул");
ТЗ.Колонки.Добавить("Наименование");
Для СчетчикЦикла=4 По ФайлСтрок Цикл
НоваяСтрока=ТЗ.Добавить();
НоваяСтрока.Артикул=СокрЛП(Ехсел.Cells(СчетчикЦикла,1).value);
НоваяСтрока.Наименование=СокрЛП(Ехсел.Cells(СчетчикЦикла,2).value);
КонецЦикла;
Ехсел.Application.Quit(); // Если этого не сделать, процесс EXCEL останется в памяти
КонецПроцедуры