Преобразование CSV в XLSX на PHP

В статье приведены два примера конвертации фалов csv в xlsx, алгоритм следующий:

  • Файл открывается с помощью fopen() и построчно преобразуем функцией fgetcsv() в массив, в качестве разделителя обычно используется ,
  • Из полученного массива сформируется xlsx файл с помощью библиотеки PHPExcel.
1

HTML форма

<form action="" method="post" enctype="multipart/form-data">
	<div class="control-group">	
		<label class="control-label">Файл csv</label>
		<div class="controls">
			<input type="file" name="file">
		</div>
	</div>

	<button type="submit">Отправить</button>		
</form>
HTML

Обработчик формы

if (!empty($_FILES['file']['tmp_name'])) {
	if (pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION) == 'csv') {
		// Чтение файла в массив.
		$list = array();
		if (($fp = fopen($_FILES['file']['tmp_name'], 'r')) !== false) {
			while (($data = fgetcsv($fp, 0, ',')) !== false) {
				$list[] = $data;
			}
			fclose($fp);
		}
			
		// Подключение PHPExcel.
		require_once __DIR__ . '/PHPExcel/Classes/PHPExcel.php';
		require_once __DIR__ . '/PHPExcel/Classes/PHPExcel/Writer/Excel2007.php';
		$xls = new PHPExcel();
				
		// В первый лист.
		$xls->setActiveSheetIndex(0);
		$sheet = $xls->getActiveSheet();

		// Формирование XLSX.
		$line = 0;
		foreach ($list as $line => $item) {
			$line++;
			foreach ($item as $col => $row) {
				$sheet->setCellValueByColumnAndRow($col, $line, $row);
			}
		}
				
		// Отдача файла в браузер.
		$filename = basename($_FILES['file']['name'], '.csv') . '.xlsx';

		header('Expires: Mon, 1 Apr 1974 05:00:00 GMT');
		header('Last-Modified: ' . gmdate('D,d M YH:i:s') . ' GMT');
		header('Cache-Control: no-cache, must-revalidate');
		header('Pragma: no-cache');
		header('Content-type: application/vnd.ms-excel');
		header('Content-Disposition: attachment; filename=' . $filename);

		$objWriter = new PHPExcel_Writer_Excel2007($xls);
		$objWriter->save('php://output'); 
		exit;
	}
}
PHP
2
$file = __DIR__ . '/list.csv';

// Чтение файла в массив.
$list = array();
if (($fp = fopen($file, 'r')) !== false) {
	while (($data = fgetcsv($fp, 0, ',')) !== false) {
		$list[] = $data;
	}
	fclose($fp);
}
	
// Подключение PHPExcel.
require_once __DIR__ . '/PHPExcel/Classes/PHPExcel.php';
require_once __DIR__ . '/PHPExcel/Classes/PHPExcel/Writer/Excel2007.php';
$xls = new PHPExcel();

// В первый лист.
$xls->setActiveSheetIndex(0);
$sheet = $xls->getActiveSheet();

// Формирование XLSX.
$line = 0;
foreach ($list as $line => $item) {
	$line++;
	foreach ($item as $col => $row) {
		$sheet->setCellValueByColumnAndRow($col, $line, $row);
	}
}

// Сохранение файла.
$objWriter = new PHPExcel_Writer_Excel2007($xls);
$objWriter->save(__DIR__ . '/' . basename($file, '.csv') . '.xlsx');
PHP
14.11.2018, обновлено 17.12.2022
9001

Комментарии

, чтобы добавить комментарий.

Другие публикации

Обзор PHP расширений для чтения файлов Excel
В статье представлены различные PHP-расширения для чтения файлов XLS, XLSX, описаны их плюсы и минусы, а также примеры...
56832
+2
Чтение Google таблиц в PHP
Как получить данные из Google spreadsheets в виде массива PHP? Очень просто, Google docs позволяет экспортировать лист в формате CSV, главное чтобы файл был в общем доступе.
22744
+6
Редактирование файла в PHPExcel
Иногда бывают случаи, когда нужно заполнить некий уже сформатированный xls-файл в PHP. Библиотека PHPExcel тоже это...
3744
-1
Excel: Как умножить все выделенные ячейки на число
Задача: В прайс-листе необходимо увеличить цены на 20%, при этом чтобы в листе не было формул.
13040
0
Экспорт данных из таблицы MySQL в Excel
Если нужно быстро и единоразово выгрузить данные из таблицы MySQL в Exel файл, то помогут следующие способы:
7362
+3
Генерация счета на оплату PDF PHP
С помощью расширения dompdf можно легко сформировать PDF файл. По сути, dompdf - это конвертер HTML в PDF который...
65893
+33