Каталог решений - Быстрый экспорт Таблицы значений в CSV файл

Быстрый экспорт Таблицы значений в CSV файл

Быстрый экспорт Таблицы значений в CSV файл

В наличии

Экспорт данных в CSV — частая задача. Приведённое решение создает CSV файл за несколько строк кода без полного перебора всех значений

Категория:

Описание

Для примера рассмотрим преобразование таблицы значений, полученное с помощью произвольного запроса.
 

Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    *
        |ИЗ
        |    Справочник.Пользователи КАК Пользователи";
    
ТаблицаЗначений = Запрос.Выполнить().Выгрузить();

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

Функция ТаблицаЗначенийВТабличныйДокумент(ТаблицаЗначений) Экспорт
	
	//Используем Построитель отчета для вставки Данных ТаблицыЗначений в ТабличныйДокумент 
	ТабличныйДокумент = Новый ТабличныйДокумент;
	Построитель = Новый ПостроительОтчета;
	Построитель.ВыводитьПодвалОтчета = Ложь; 
	Построитель.ВыводитьПодвалТаблицы = Ложь; 
	Построитель.ВыводитьОбщиеИтоги = Ложь; 
	Построитель.ВыводитьЗаголовокОтчета = Ложь;
	Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаЗначений);  
	Построитель.Вывести(ТабличныйДокумент);
	
	
	//Постротель оставляет первую колонку пустой, удаляем ее чтобы данные начинались с первой колонки
	ТабличныйДокумент.УдалитьОбласть(ТабличныйДокумент.Область(1, 1,ТабличныйДокумент.ВысотаТаблицы , 1), ТипСмещенияТабличногоДокумента.ПоГоризонтали);
	
	// Возвращает Табличный документ где первая строка содержит колонки ТаблицыЗначений а последующие строки хранят строки
	Возврат ТабличныйДокумент;

КонецФункции 


ТабличныйДокумент = ТаблицаЗначенийВТабличныйДокумент(ТаблицаЗначений); 

Полученный Табличный документ мы сохраним в виде текстового файла.

Предварительно временно заменим существующие символы табуляции в исходных данных, чтобы не сломать структуру csv файла, так как колонки будут разделены по ним:
 

//Определяем куда нужно сохранить готовый результат
ИмяФайла = "D:\Repository\test.csv"; 

//В Табличном документе заменяем все символы Табуляции на текст "<$СимволТабуляции$/>" чтобы исключить конфликты при создании csv-файла
// этот цикл можно исключить если исходные данные точно не содержат символы табуляции
ОбластьПоиска = ТабличныйДокумент.Область(1,1,1,1);
Пока Истина Цикл
	ОбластьПоиска = ТабличныйДокумент.НайтиТекст(Символы.Таб,ОбластьПоиска);
	Если ОбластьПоиска = Неопределено Тогда
		Прервать;
	КонецЕсли;
	ОбластьПоиска.Текст = СтрЗаменить(ОбластьПоиска.Текст,Символы.Таб,"<$СимволТабуляции$/>");	
КонецЦикла;

// Сохраняем Табличный документ как текст, в полученном текстовом документе значения каждой ячейки разделяются через символ табуляции 
ТабличныйДокумент.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.TXT);
	
//Извлекаем полученный Текстовый документ
ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.Прочитать(ИмяФайла,КодировкаТекста.UTF8,Символы.ПС);     	
Текст = ТекстовыйФайл.ПолучитьТекст();

Сформированный текстовый файл имеет следующий вид:

 

 

Как и говорилось выше, данные тут разделены символом табуляции.

Теперь нам необходимо заменить символом табуляции на разделитель csv файла — ";", а также восстановить ранее замененные и символы ТАБ. После чего мы можем сохранить готовый csv файл.

//Заменяем сформированные символы табуляции на символ рахделитель csv файла - ";"
Текст = СтрЗаменить(Текст,Символы.Таб,";"); 
	
// Востанавливаем ранее экранированные символы табуляции в самих данных
Текст = СтрЗаменить(Текст,"<$СимволТабуляции$/>",Символы.Таб);
	
// Сохраняем сформированные текст csv-файла 
ТекстовыйФайл.УстановитьТекст(Текст);
ТекстовыйФайл.Записать(ИмяФайла,,Символы.ПС);

Готово!

 

has been added to your cart:
Оформление заказа