При пакетной обработке файлов Excel через COM-объект программисты часто сталкиваются с тем, что на экране периодически возникают системные окна подтверждения сохранения или запросы на пересчет данных. Это блокирует выполнение фоновых заданий и делает автоматизацию невозможной. Рассмотрим, как эффективно решить эту проблему.
Если специфика задачи требует использования COM-объекта (например, для работы с макросами), необходимо принудительно отключить все всплывающие предупреждения. Основная причина появления окон — попытка Excel сохранить изменения в файле при закрытии.
Для корректного управления процессом воспользуемся следующими настройками:
DisplayAlerts. Оно подавляет системные запросы.Close с параметром 0 (или False), что эквивалентно отказу от сохранения изменений.Разберем пример правильного кода для завершения работы с файлом:
Процедура ЗакрытьExcel(Книга, Excel)
// Отключаем уведомления
Excel.DisplayAlerts = False;
// Закрываем книгу без сохранения изменений (0)
Книга.Close(0);
// Завершаем процесс приложения
Excel.Quit();
// Возвращаем уведомления (хорошая практика)
Excel.DisplayAlerts = True;
// Очищаем объект
Excel = Неопределено;
КонецПроцедуры
Современные версии платформы 1С позволяют обходиться без COM-соединения с Excel. Это гораздо быстрее, стабильнее и не требует наличия установленного офисного пакета на сервере. Для загрузки данных используем объект ТабличныйДокумент.
Рассмотрим, как реализовать этот метод:
Функция ПрочитатьФайлExcel(АдресФайла)
имяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
ПолучитьИзВременногоХранилища(АдресФайла).Записать(имяВременногоФайла);
ТабличныйДокумент = Новый ТабличныйДокумент;
Попытка
// Используем СпособЧтенияЗначенийТабличногоДокумента
ТабличныйДокумент.Прочитать(имяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
УдалитьФайлы(имяВременногоФайла);
Возврат ТабличныйДокумент;
Исключение
Сообщить("Ошибка при чтении файла: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции
Метод Прочитать() может не распознать файлы с макросами (расширение xlsm). В таких случаях рекомендуем использовать вспомогательный подход: автоматическое копирование файла во временный каталог с переименованием расширения в xlsx. После того как 1С прочитает данные, временный файл нужно обязательно удалить. Это позволит избежать блокировок и конфликтов с правами доступа.
Если вы обрабатываете большое количество документов, следуйте этим советам для предотвращения сбоев:
COM-объект, следите, чтобы процесс Excel.exe завершался корректно даже при возникновении ошибок. Используйте блоки Попытка...Исключение, чтобы вызывать Quit() в любом случае.ТабличныйДокумент.Прочитать() полностью устраняет проблему «зависания» на окнах, так как 1С работает с данными внутри документа напрямую, не запуская графический интерфейс Excel.Применение этих методов позволит вам автоматизировать рутинные задачи без участия пользователя, обеспечив стабильную работу регламентных заданий в вашей учетной системе.