Загрузка данных из внешних файлов — это одна из наиболее частых задач, с которыми сталкиваются разработчики 1С. Рассмотрим подробно, как правильно настроить процесс переноса информации, если вам не нужно загружать весь файл целиком, а требуется извлечь данные только из конкретных колонок (например, второй и двадцать четвертой).
Самый простой, хотя и не самый быстрый способ — это использование COM-объекта Excel.Application. Этот метод позволяет напрямую обращаться к ячейкам листа по их координатам. Давайте разберем по шагам, как организовать цикл перебора строк и выбрать только необходимые колонки.
Для начала создадим объект Excel и получим доступ к нужному листу. Затем организуем цикл по строкам и внутри него — цикл по колонки. Чтобы сэкономить ресурсы и не обрабатывать лишние данные, мы установим условие на проверку номера текущей итерации цикла.
// Предположим, что файл уже открыт как Лист
Для НомерСтроки = 1 По КолСтроки Цикл
НоваяСтрока = ТабличнаяЧасть.Добавить();
Попытка
Для ш = 1 По КолКолонок Цикл
// Выбираем только те колонки, которые нам нужны
Если ш = 2 ИЛИ ш = 24 Тогда
ИмяКолонки = "Колонка" + ш;
// Записываем значение в ячейку табличной части
НоваяСтрока[ИмяКолонки] = Лист.Cells(НомерСтроки, ш).Value;
КонецЕсли;
КонецЦикла;
Исключение
Сообщить("Ошибка обработки строки №" + НомерСтроки);
КонецПопытки;
КонецЦикла;
В этом примере мы используем обращение НоваяСтрока[ИмяКолонки]. Это более профессиональный подход, чем использование функции Выполнить, так как он позволяет динамически обращаться к реквизитам табличной части без лишних затрат на интерпретацию строковых команд.
Несмотря на наглядность метода с Cells(row, col), важно понимать, что при каждом обращении к нему 1С «переключается» на внешнее приложение Excel. Это создает огромные накладные расходы. Если в вашем файле тысячи строк, процесс может затянуться на долгие минуты. Мы настоятельно рекомендуем использовать этот способ только для небольших объемов данных.
Рассмотрим более производительный подход — работу через ТабличныйДокумент. Этот объект является родным для платформы 1С и позволяет загрузить содержимое файла целиком в оперативную память. Это в разы быстрее прямого COM-соединения.
ТабличныйДокумент.Прочитать("ПутьКФайлу").ПолучитьОбласть или прямой перебор ячеек внутри уже загруженного документа, что работает на порядок быстрее.Чтобы ваша обработка не «ломалась» при каждом изменении файла пользователем, рекомендуем придерживаться следующих правил:
Соответствие, где ключом будет название колонки, а значением — её индекс. После этого обращение к данным станет гибким: Значение = Лист.Cells(НомерСтроки, КартаКолонок["Сумма"]).Value.Формат или функции преобразования типов Число() или Дата() при загрузке в реквизиты 1С.Использование таких подходов позволит вам создавать надежные и быстрые инструменты загрузки, которые будут радовать пользователей своей стабильностью и отсутствием ошибок при изменении структуры входящих файлов.