Если нужно быстро и единоразово выгрузить данные из таблицы MySQL в Exel файл, то помогут следующие способы:
В PHPMyAdmin при экспорте можно выбрать формат «CSV for MS Excel»:
При открытии полученного файла в Excel будет сбита кодировка:
Чтобы это исправить, нужно открыть csv файл в редакторе типа Notepad++ и изменить кодировку на ANSI:
Результат:
Смысл метода состоит в том чтобы PHP-скриптом сформировать HTML таблицу:
<?php
$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
$sth = $dbh->prepare("SELECT * FROM `test`");
$sth->execute();
$items = $sth->fetchAll(PDO::FETCH_ASSOC);
?>
<table>
<tr>
<td>ID</td>
<td>Категория</td>
<td>Название</td>
<td>Описание</td>
</tr>
<?php foreach($items as $row): ?>
<tr>
<td><?php echo $row['id']; ?></td>
<td><?php echo $row['category']; ?></td>
<td><?php echo $row['name']; ?></td>
<td><?php echo $row['text']; ?></td>
</tr>
<?php endforeach; ?>
</table>
Результат работы скрипта:
Полученную таблицу копируем и вставляем в чистый лист Microsoft Exel:
Третий метод – сформировать xls-файл в библиотеке PHPExcel (PHPExcel.zip).
//spl_autoload_unregister('autoload');
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();
// Шапка
$sheet->getStyle("A1:D1")->getFont()->setBold(true);
$sheet->setCellValue("A1", 'ID');
$sheet->setCellValue("B1", 'Категория');
$sheet->setCellValue("C1", 'Название');
$sheet->setCellValue("D1", 'Описание');
// Выборка из БД
$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
$sth = $dbh->prepare("SELECT * FROM `test`");
$items = $sth->fetch(PDO::FETCH_ASSOC);
$index = 2;
foreach ($items as $row) {
$sheet->setCellValue("A" . $index, $row['id']);
$sheet->setCellValue("B" . $index, $row['category']);
$sheet->setCellValue("C" . $index, $row['name']);
$sheet->setCellValue("D" . $index, $row['name']);
$index++;
}
// Отдача файла в браузер
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=prods.xlsx");
$objWriter = new PHPExcel_Writer_Excel2007($xls);
$objWriter->save('php://output');
exit();