В этой статье мы покажем 4 способа чтения файла Excel в 1С.
Фрагменты кода, которые будут приведены ниже вы сможете найти в файле внешней обработки:

Способ № 1. Табличный документ (чтение по ячейкам)
&НаСервере
Процедура ПрочитатьExcel_ТабличныйДокумент(ПутьКФайлу)
ТаблицаТоваров.Очистить();
ТабДок = Новый ТабличныйДокумент;
Попытка
ТабДок.Прочитать(ПутьКФайлу);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось прочитать файл по причине: " + ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
КоличествоСтрок = ТабДок.ВысотаТаблицы;
КоличествоКолонок = ТабДок.ШиринаТаблицы;
Для НомерСтроки = 1 По КоличествоСтрок Цикл
Если НомерСтроки = 1 Тогда
Продолжить;
КонецЕсли;
СтрокаТаблицы = ТаблицаТоваров.Добавить();
СтрокаТаблицы.Наименование = ТабДок.Область(НомерСтроки, 1).Текст;
СтрокаТаблицы.Артикул = ТабДок.Область(НомерСтроки, 2).Текст;
СтрокаТаблицы.Остаток = ТабДок.Область(НомерСтроки, 3).Текст;
СтрокаТаблицы.Цена = ТабДок.Область(НомерСтроки, 4).Текст;
КонецЦикла;
КонецПроцедуры
Способ № 2. Табличный документ + Построитель запроса
&НаСервере
Процедура ПрочитатьExcel_ПостроительЗапроса(ПутьКФайлу)
ТаблицаТоваров.Очистить();
ТабДок = Новый ТабличныйДокумент;
Попытка
ТабДок.Прочитать(ПутьКФайлу);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось прочитать файл по причине: " + ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
Построитель.ЗаполнитьНастройки();
Построитель.Выполнить();
ТаблицаИзExcel = Построитель.Результат.Выгрузить();
ТаблицаТоваров.Загрузить(ТаблицаИзExcel);
КонецПроцедуры
Способ № 3. Технология OLE (Excel.Application)
&НаСервере
Процедура ПрочитатьExcel_OLE(ПутьКФайлу)
ТаблицаТоваров.Очистить();
Попытка
Эксель = Новый COMОбъект("Excel.Application");
Эксель.Visible = 0;
Эксель.DisplayAlerts = 0;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось прочитать файл по причине: " + ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
Книга = Эксель.Workbooks.Open(ПутьКФайлу);
КоличествоЛистов = Книга.Sheets.Count;
Лист = Книга.Sheets(1);
КоличествоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
КоличествоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
Для НомерСтроки = 1 По КоличествоСтрок Цикл
Если НомерСтроки = 1 Тогда
Продолжить;
КонецЕсли;
СтрокаТаблицы = ТаблицаТоваров.Добавить();
СтрокаТаблицы.Наименование = Лист.Cells(НомерСтроки, 1).Value;
СтрокаТаблицы.Артикул = Лист.Cells(НомерСтроки, 2).Value;
СтрокаТаблицы.Остаток = Лист.Cells(НомерСтроки, 3).Value;
СтрокаТаблицы.Цена = Лист.Cells(НомерСтроки, 4).Value;
КонецЦикла;
Эксель.Workbooks.Close();
Эксель.Quit();
КонецПроцедуры
Способ № 4. Технология ADO (ADODB.Connection)
&НаСервере
Процедура ПрочитатьExcel_ADO(ПутьКФайлу)
ТаблицаТоваров.Очистить();
// 1. Установка соединения с источником данных
Попытка
СтрокаСоединения = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ПутьКФайлу +";
|Extended Properties=""Excel 12.0;HDR=YES""";
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.Open(СтрокаСоединения);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось установить соединение с источником данных по причине: " + ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
// 2. Получение выборки данных из источника
Попытка
ТекстЗапроса = "SELECT * FROM [Лист1$]";
Выборка = Новый COMОбъект("ADODB.RecordSet");
Выборка.Open(ТекстЗапроса, Соединение);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось получить данные из источника по причине: " + ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
// 3. Обработка выборки данных
Пока НЕ Выборка.EOF() Цикл
СтрокаТаблицы = ТаблицаТоваров.Добавить();
СтрокаТаблицы.Наименование = Выборка.Fields(0).Value;
СтрокаТаблицы.Артикул = Выборка.Fields(1).Value;
СтрокаТаблицы.Остаток = Выборка.Fields(2).Value;
СтрокаТаблицы.Цена = Выборка.Fields(3).Value;
Выборка.MoveNext();
КонецЦикла;
// 4. Закрыть соединение
Выборка.Close();
Соединение.Close();
КонецПроцедуры
Этот материал также доступен в видеоформате на нашем YouTube-канале:
Подписывайтесь на нас в соц. сетях:
YouTube: https://www.youtube.com/@ironskills-1c
Telegram: https://t.me/ironskills_community1c
VK: https://vk.com/ironskillsby
Instagram: https://www.instagram.com/ironskills_school/
YouTube: https://www.youtube.com/@ironskills-1c
Telegram: https://t.me/ironskills_community1c
VK: https://vk.com/ironskillsby
Instagram: https://www.instagram.com/ironskills_school/