Как быстро сохранить текстовый файл с разделителями в Excel средствами 1С?

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

При интеграции систем и выгрузке отчетов часто возникает типичная задача: имеется строка или текстовый файл, в котором данные разделены специальным символом (точкой с запятой, запятой или знаком табуляции). Требуется быстро и корректно преобразовать эти данные в файл Excel, распределив каждое значение по отдельным колонкам.

Разберем подробно, какими способами можно решить эту задачу — от базового программного заполнения табличного документа до оптимизированных подходов выгрузки больших массивов данных и прямой работы с CSV.

Способ 1. Программное заполнение через ТабличныйДокумент

Рассмотрим классический способ, когда мы построчно считываем исходный текстовый файл, делим строки на массив подстрок по заданному символу-разделителю и заполняем ячейки объекта ТабличныйДокумент, после чего сохраняем результат в файл нужного формата.

Посмотрим на пример базовой реализации:


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

Пока Стр <> Неопределено Цикл
    Кол = 1;
    Для Каждого Ячейка Из СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Стр, Разделитель) Цикл
        Таб.Область(Ст, Кол).Текст = Ячейка;
        Кол = Кол + 1;
    КонецЦикла;
    
    Ст = Ст + 1;
    Стр = Чтение.ПрочитатьСтроку();
КонецЦикла;

Чтение.Закрыть();
Таб.Записать(ИмяФайлаЭксель, ТипФайлаТабличногоДокумента.XLSX);

Проанализируем важные нюансы этого подхода:

  1. Производительность: Обращение к каждой отдельной ячейке через конструкцию Таб.Область(Ст, Кол).Текст работает достаточно медленно. На объемах данных свыше нескольких тысяч строк такой алгоритм приведет к заметным задержкам и повышенному потреблению оперативной памяти.
  2. Формат выгрузки: Обратите внимание на тип сохраняемого файла. Если использовать устаревший формат ТипФайлаТабличногоДокумента.XLS, платформа столкнется с жестким ограничением формата Excel 97–2003 в 65 536 строк и 256 колонок. Для выгрузки значительных массивов данных (например, более 100 000 строк) всегда используйте ТипФайлаТабличногоДокумента.XLSX.

Способ 2. Оптимизация выгрузки больших объемов через ПостроительОтчета

Если требуется выгрузить десятки или сотни тысяч строк программно без прямых обращений к ячейкам, оптимизируем процесс. Заполним сначала ТаблицаЗначений, а затем выведем её в табличный документ одним вызовом через ПостроительОтчета.

Разберем по шагам, как это реализовать:


// Создаем таблицу значений с нужным числом колонок
ТЗ = Новый ТаблицаЗначений;
Для НомерКолонки = 1 По КоличествоКолонок Цикл
    ТЗ.Колонки.Добавить("Колонка" + НомерКолонки, Новый ОписаниеТипов("Строка"));
КонецЦикла;

// Считываем файл и заполняем строки таблицы
Чтение = Новый ЧтениеТекста(ИмяФайла);
Стр = Чтение.ПрочитатьСтроку();

Пока Стр <> Неопределено Цикл
    Подстроки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Стр, Разделитель);
    НоваяСтрока = ТЗ.Добавить();
    Для Индекс = 0 По Подстроки.ВГраница() Цикл
        Если Индекс < ТЗ.Колонки.Количество() Тогда
            НоваяСтрока[Индекс] = Подстроки[Индекс];
        КонецЕсли;
    КонецЦикла;
    Стр = Чтение.ПрочитатьСтроку();
КонецЦикла;
Чтение.Закрыть();

// Быстрый вывод таблицы через ПостроительОтчета
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
ТабДок = Новый ТабличныйДокумент;
Построитель.Вывести(ТабДок);

ТабДок.Записать(ИмяФайлаXLSX, ТипФайлаТабличногоДокумента.XLSX);

Этот способ отрабатывает в разы быстрее, поскольку формирование табличного документа происходит внутренними механизмами платформы на уровне C++, минуя накладные расходы на создание отдельных объектов областей.

Способ 3. Использование формата CSV и настройка разделителей

Самый быстрый способ сформировать файл для Excel — вообще отказаться от генерации бинарных форматов XLS/XLSX средствами 1С и сохранить данные как текстовый файл с расширением .csv. Однако здесь пользователи часто сталкиваются с тем, что Excel открывает файл в одну колонку либо отображает нечитаемые символы («кракозябры»).

Выясним причину такого поведения и рассмотрим правила подготовки CSV-файла:

  1. Системный разделитель: При открытии файла двойным кликом Excel ориентируется на региональные настройки операционной системы Windows. В русскоязычной локализации разделителем элементов списка по умолчанию является точка с запятой (;). Если в файле используется запятая (,), Excel поместит всю строку в первую ячейку. Следовательно, для мгновенного открытия в русской версии Excel необходимо использовать точку с запятой.
  2. Кодировка файла: Чтобы кириллица открылась корректно, сохраняйте файл в кодировке Windows-1251 (ANSI) либо в UTF-8 с BOM (Byte Order Mark). Если сохранить обычный UTF-8 без сигнатуры BOM, Excel интерпретирует файл как ANSI, что приведет к повреждению текста.
  3. Директива разделителя в первой строке: Если данные обязательно должны быть разделены запятой или другим нестандартным знаком, добавьте в самую первую строку файла служебную команду: sep=, Excel прочитает эту директиву при запуске и автоматически разобьет колонки по указанному символу, проигнорировав настройки Windows.

Способ 4. Ручной импорт файла в Excel через встроенный мастер

Если файл уже сформирован сторонней системой и изменить его разделители в коде невозможно, его можно правильно открыть штатными средствами самого Microsoft Excel:

  1. Откройте пустую книгу Excel.
  2. Перейдите на вкладку Данные.
  3. В блоке получения внешних данных нажмите кнопку Из текста/CSV (или «Из текста»).
  4. Выберите исходный текстовый файл.
  5. В открывшемся мастере укажите правильную кодировку исходного файла, выберите нужный разделитель (запятая, точка с запятой, табуляция или знак «|») и подтвердите загрузку данных.

Таким образом, для программной автоматизации лучшим решением является выгрузка через ПостроительОтчета в формат XLSX либо формирование CSV с точкой с запятой в кодировке Windows-1251.

← На главную