Часто в работе бухгалтеров и менеджеров возникают ситуации, когда поставщики присылают прайс-листы или отчеты в устаревшем формате .xls (Microsoft Office Excel 97-2003). Если ваша система загрузки настроена на работу только с современным форматом .xlsx, возникает конфликт. Давайте разберем, как автоматизировать этот процесс и избавить пользователей от рутинного ручного пересохранения файлов.
Прежде чем приступать к написанию кода, важно понять, почему файл не открывается. Часто под расширением .xls скрывается не бинарный файл Excel 97-2003, а HTML-таблица или файл в формате .xlsx, который был ошибочно переименован. Если файл при попытке открытия через стандартные инструменты 1С выдает ошибку, необходимо проверить его содержимое. В ряде случаев для решения проблемы достаточно просто изменить расширение файла на .xlsx через стандартные файловые операции.
Наиболее надежным способом программной конвертации, если на сервере или рабочем месте пользователя установлен Microsoft Excel, является использование COM-объект. Этот метод позволяет задействовать встроенные механизмы Excel для «перепаковки» файла в нужный формат.
Рассмотрим пошаговый алгоритм действий:
Excel.Application.WorkBooks.Open().SaveAs(), где ключевым является указание параметра FileFormat.Quit() для освобождения оперативной памяти.Для выполнения конвертации вы можете использовать следующий код в модуле вашей обработки:
// Выбираем файл через диалог
Если Диалог.Выбрать() Тогда
ВыбранныйФайл = Диалог.ПолноеИмяФайла;
// Создаем COM-объект для управления Excel
Эксель = Новый COMОбъект("Excel.Application");
// Открываем книгу
КнигаЗагрузки = Эксель.WorkBooks.Open(ВыбранныйФайл);
// Сохраняем файл в формате 56 (xls) или ином необходимом
// Для xlsx можно использовать код формата 51
КнигаЗагрузки.SaveAs(ВыбранныйФайл, 56);
// Закрываем приложение
Эксель.Quit();
// Продолжаем дальнейшую обработку файла
Объект.Файл = ВыбранныйФайл;
ЧтениеExcel_через_ТД(ВыбранныйФайл);
КонецЕсли;
При использовании COM-объектов важно учитывать следующие нюансы:
Попытка...Исключение. Это позволит избежать появления «зомби-процессов» (зависших в памяти Excel), если файл окажется поврежденным или защищенным паролем.COM-объекта — это тяжелая операция для сервера. Если количество пользователей велико, старайтесь не запускать этот процесс в фоновых заданиях на сервере, где не установлен пакет Microsoft Office, так как это приведет к ошибке.Excel.Application невозможно (например, на Linux-серверах), рассмотрите использование внешних компонентов для прямого чтения XML-структуры файлов .xlsx или библиотек, работающих с OpenXML. Это позволит работать с файлами гораздо быстрее и без необходимости установки стороннего ПО.ТабличныйДокумент.Прочитать(), который в последних версиях платформы 1С значительно лучше справляется с некорректными форматами.Применяя данные подходы, вы сможете обеспечить бесперебойную загрузку прайс-листов от любых поставщиков, сохранив при этом стабильность вашей учетной системы.