PHP

Преобразование 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>

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

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;
    }
}
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');
14 ноября 2018
В последнее время письма отправляемые с хостингов через функции mail() и mb_send_mail() часто попадают или совсем не...
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
В статье приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и...
Библиотека GD дает возможность работать с изображениями в PHP. Далее представлены примеры как изменить размер, вырезать...