Создание CSV-файла в 1С-Битрикс

Создание CSV-файла в 1С-Битрикс

1936
31.05.2017
16.06.2018

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

К данному классу я уже обращался при обработке CSV-файла для загрузки данных в систему.

Для создания CSV-файла собираем массив $arRows с данными и для удобства массив заголовков выносим отдельно, в массив $arFields. Получение полей для файла оставим за кадром, на ваше усмотрение.

Для начала подключаем класс для работы с CSV:

require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/csv_data.php");

Далее очистим созданный ранее файл (если этого не сделать будет производиться дозапись в файл)

$filePath = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/catalog_export/' . 'googleAdwords.csv';
$fp = fopen($filePath, 'w+');
@fclose($fp);

Зададим режим работы класса, установим разделитель данных, отметим, что в первой строке содержатся заголовки данных:

$fields_type = 'R'; //дописываем строки в файл
$delimiter = ";";   //разделитель для csv-файла
$csvFile = new \CCSVData($fields_type, false);
$csvFile->SetFieldsType($fields_type);
$csvFile->SetDelimiter($delimiter);
$csvFile->SetFirstHeader(true);

Запишем в файл заголовки:

$csvFile->SaveFile($filePath, $arFields);

Далее пройдемся по всем строкм данных и допишем их в файл:

foreach ($arRows as $row)
{
	$writeAr = array();
	foreach ($arFields as $field)
	{
		$writeAr[] = $row[$field];
	}
	$csvFile->SaveFile($filePath, $writeAr);
}

В результате, в файле, прописанном в переменной filePath будет доступен наш новый файл

Update 2018-06-16 - Выгрузка в CSV-файл всех значений свойства типа "Список"

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

require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/csv_data.php");
function putDataToCSV($file,$array){
	$fields_type = 'R'; //дописываем строки в файл
	$delimiter = ";";   //разделитель для csv-файла
	$csvFile = new \CCSVData($fields_type, false);
	$csvFile->SetFieldsType($fields_type);
	$csvFile->SetDelimiter($delimiter);
	$csvFile->SetFirstHeader(true);
	$arrayFields = array();
	foreach (array_keys($array[current(array_keys($array))]) as $value)
	{
		if(substr($value,0,1)=='~') continue;
		$arrayFields[] = $value;
	}
	// запишем заголовки:
	$csvFile->SaveFile($file,$arrayFields);

	foreach ($array as $arValue){
		$row = array();
		foreach ($arrayFields as $arrayField)
		{
			$row[] = $arValue[$arrayField];
		}
		$csvFile->SaveFile($file,$row);
	}
}

Дальше - получаем список значений для записи:

\Bitrix\Main\Loader::includeModule('iblock');
$db_enum_list = CIBlockProperty::GetPropertyEnum("COLLECTION", Array(),
	Array("IBLOCK_ID"=>projectInit::catalogIblock)
);
$collections = array();
while ($ar_value = $db_enum_list->GetNext()){
	$collections[$ar_value['ID']] = $ar_value;
}

Определяем файл для записи:

use Bitrix\Main\IO,
Bitrix\Main\Application;
$fileWithPropsValue = '/upload/pai/collections.csv';
if(!IO\Directory::isDirectoryExists(Application::getDocumentRoot() . '/upload/pai/')){
	IO\Directory::createDirectory(Application::getDocumentRoot() . '/upload/pai/');
}
$file = new IO\File(Application::getDocumentRoot() . $fileWithPropsValue);
$file->putContents(''); // очищаем файл

putDataToCSV(Application::getDocumentRoot().$fileWithPropsValue,$collections);

Готово! Данный скрипт использовался для переноса данных со старой версии одного сайта из свойства типа "Список" в highload-инфоблок.



Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

Еще никто не комментировал данную публикацию. Будьте первыми!

Добавить комментарий

captcha

Возврат к списку