Почему 1С выдает ошибку «Формат файла не поддерживается» при чтении Excel и как это исправить?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке механизмов импорта данных из внешних файлов программисты 1С часто сталкиваются с ситуацией, когда стандартный метод Прочитать() объекта ТабличныйДокумент отказывается открывать файлы Excel. Ситуация осложняется тем, что визуально файл выглядит корректно, а обычный Microsoft Excel открывает его без замечаний. В этой статье мы подробно разберем, почему возникает ошибка «Формат файла не поддерживается», проанализируем внутреннюю структуру файлов и найдем пути решения проблемы.

Разбор типичной ситуации и анализ кода

Рассмотрим сценарий, с которого начинается большинство подобных проблем. Разработчик получает двоичные данные файла (например, из хранилища или по почте), сохраняет их во временный файл и пытается прочитать его в табличный документ. Типичный фрагмент кода выглядит следующим образом:


ФайлEXCELНаСервере = ПолучитьИмяВременногоФайла(Расширение);
ДвоичныеДанные.Записать(ФайлEXCELНаСервере);

ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.Прочитать(ФайлEXCELНаСервере);

На последней строке система выбрасывает исключение. Первое, на что стоит обратить внимание — это переменная Расширение. Платформа 1С очень чувствительна к расширению временного файла, который она пытается проанализировать. Если в переменной передано значение без точки (например, "xlsx" вместо ".xlsx"), алгоритмы автоматического определения формата могут сработать некорректно.

Проблема переименования: расширение против структуры

Выясним главную причину ошибки, которая часто скрывается в «ручном» манипулировании форматами. Проанализируем ситуацию: если файл изначально был в формате .xlsb (Excel Binary Workbook), а его просто переименовали в .xlsx через проводник или программно, 1С не сможет его прочитать. Почему так происходит?

Рассмотрим техническую разницу:

Таким образом, простое изменение букв в расширении файла не меняет его внутреннюю структуру. Платформа 1С, видя расширение .xlsx, пытается применить к нему правила разбора XML, натыкается на бинарные данные и выдает закономерную ошибку о неподдерживаемом формате. При необходимости можно воспользоваться обработкой для импорта данных из файлов xlsb и других форматов Excel.

Как реализовать корректный выбор и чтение файла

Для того чтобы минимизировать ошибки на этапе выбора файла пользователем, разберем пример правильной организации процедуры загрузки. Нам необходимо настроить фильтр в диалоге выбора файла и правильно передать данные на сервер.

Пример кода для клиентской части:


&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите файл Excel...";
    Диалог.Фильтр = "Файлы Excel (*.xls; *.xlsx)|*.xls;*.xlsx"; // Исключаем .xlsb, если не планируем его обрабатывать
    
    Если Диалог.Выбрать() Тогда
        ИмяФайла = Диалог.ПолноеИмяФайла;
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПрочитатьФайл(Команда)
    ФайлОбъект = Новый Файл(ИмяФайла);
    Если НЕ ФайлОбъект.Существует() Тогда
        Возврат;
    КонецЕсли;
    
    // Получаем двоичные данные и передаем на сервер вместе с расширением
    ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла);
    Результат = ОбработатьФайлНаСервере(ДвоичныеДанные, ФайлОбъект.Расширение);
КонецПроцедуры

Что делать, если все-таки нужно прочитать .xlsb?

Если специфика вашей задачи требует работы именно с бинарным форматом .xlsb, стандартный метод ТабличныйДокумент.Прочитать() вам не подойдет. Проанализируем альтернативные варианты:

  1. Использование COM-объекта (только для Windows): Это самый надежный способ прочитать любой файл, который открывается самим Excel. Мы создаем экземпляр приложения Excel на сервере, открываем файл и переносим данные в 1С.
  2. Конвертация: Перед загрузкой в 1С файл должен быть пересохранен в формате Excel 2007+ (.xlsx). Это можно сделать вручную или с помощью скриптов на стороне сервера.
  3. Сторонние библиотеки: Использование внешних компонент или Python-скриптов (через ЗапуститьПриложение), которые умеют конвертировать xlsb в csv или xlsx.

Пример использования COM-соединения для чтения «проблемных» файлов:


Попытка
    Эксель = Новый COMОбъект("Excel.Application");
    Книга = Эксель.Workbooks.Open(ПутьКФайлу);
    Лист = Книга.Sheets(1);
    
    // Пример получения значения ячейки
    Значение = Лист.Cells(1, 1).Value;
    
    Книга.Close(Ложь);
    Эксель.Quit();
Исключение
    Сообщить("Ошибка при работе через COM: " + ОписаниеОшибки());
КонецПопытки

Особенности работы на сервере под Linux

Важно помнить, что если ваш сервер 1С работает под управлением ОС Linux, использование COMОбъект будет невозможно. В этом случае ТабличныйДокумент — ваш основной инструмент. Чтобы он работал стабильно, убедитесь в следующем:

Подводя итог, можно сказать, что ошибка «Формат файла не поддерживается» чаще всего является следствием несоответствия внутреннего содержимого файла его расширению. Внимательная проверка форматов на этапе выбора файла и понимание ограничений платформы 1С позволяют избежать подобных проблем еще на стадии проектирования системы. Для решения задач загрузки также можно использовать универсальную обработку для импорта данных из Excel в 1С.

← На главную