Чтение файла Excel в 1С

Чтение файла Excel в 1С 8.х может проводиться несколькими способами. Одним из самых простых способов программного чтения файлов Excel в 1С является подключение через COMобъект.

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

Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.ПредварительныйПросмотр = Ложь;
Диалог.Фильтр = "(*.xls)|*.xls";

Если ЗначениеЗаполнено(Файл) Тогда
Диалог.ПолноеИмяФайла= Файл;
КонецЕсли;

Если Диалог.Выбрать() Тогда
Файл= Диалог.ПолноеИмяФайла;

КонецЕсли;

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

После этого в реквизите Файл должен находить полный адрес файла Excel.

Допустим, файл содержит две колонки:

  1. Артикул.
  2. Наименование товара.

Данные начинаются с 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. Это делается так:

Версия = Лев(Ехсел.Version,Найти(Ехсел.Version,".")-1);
Если Версия = "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 останется в памяти

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *