
Привет. Очень часто возникает необходимость экспортировать какие-то данные с сайта в Excel таблицу, например внутри личного кабинета компании формировать какой-то отчет и выгрузить его в формате CSV. PHP отлично с этим справляется и даже существуют специальные библиотеки, которые в значительной степени упрощают работу с экспортом данных в Excel. Но в данном примере мы их рассматривать не будем, а научимся это делать на чистом PHP. Ранее я публиковал материалы по созданию CRUD приложения на PHP, где мы помещали в базу данных некую информацию и выводили е на страницу. Я покажу, как можно сделать запись этих данных в CSV файл. И то же самое мы реализуем из другого приложения, где мы делали веб-приложение и хранили все записи в JSON файле. Как это выглядит можно посмотреть на демо странице:

Демо
Экспорт в CSV из БД MySQL
Для начала подготовим кнопку, по нажатию которой на компьютер будет происходить загрузка CSV файла с экспортированными данными. Соответственно она должна быть обернута в тег form. Я использую Bootstrap и FontAwesome, поэтому добавлю еще иконку.
1
2
3
4
5
| <form action="" method="post">
<button class="btn btn-primary mb-1" name="export_excel">
<i class="fa fa-file-csv"></i>
Export</button>
</form> |
<form action="" method="post">
<button class="btn btn-primary mb-1" name="export_excel">
<i class="fa fa-file-csv"></i>
Export</button>
</form>

PHP CSV
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| if (isset($_POST['export_exel'])) {
header("Content-Type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=download.csv");
$output = fopen("php://output", "w");
fputcsv($output, array('ID', 'Имя', 'Фамилия', 'Ставка'));
$sql = "SELECT * FROM `crud` ORDER BY `id` DESC";
$result = mysqli_query($mysqli, $sql);
while ($row = mysqli_fetch_assoc($result)) {
fputcsv($output, $row);
}
fclose($output);
exit;
} |
if (isset($_POST['export_exel'])) {
header("Content-Type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=download.csv");
$output = fopen("php://output", "w");
fputcsv($output, array('ID', 'Имя', 'Фамилия', 'Ставка'));
$sql = "SELECT * FROM `crud` ORDER BY `id` DESC";
$result = mysqli_query($mysqli, $sql);
while ($row = mysqli_fetch_assoc($result)) {
fputcsv($output, $row);
}
fclose($output);
exit;
}
Нажимаем кнопку экспорта и получаем CSV файл с данными:

Эта таблица полностью повторяет все, что находится в базе данных MySQL, только в обратном порядке.

Если нужно экспортировать не все, а лишь некоторые ячейки таблицы, к примеру вы хотите из этой базы взять только Имя
Фамилию, то всего лишь нужно заменить пару строк кода:
5
| fputcsv($output, array('Имя', 'Фамилия')); |
fputcsv($output, array('Имя', 'Фамилия'));
10
| fputcsv($output, [$row['first'], $row['description']]); |
fputcsv($output, [$row['first'], $row['description']]);
Конечно в этой БД полный бардак, но думаю, что принцип вам понятен. Для того, чтобы каждый раз вы экспортировали уникальный файл, то можно добавить в его имя временную метку:
И изменить 3 строчку на:
3
| header("Content-Disposition: attachment; filename=download".$t .".csv"); |
header("Content-Disposition: attachment; filename=download".$t .".csv");
Экспорт в CSV из JSON файла.
Как реализована запись в JSON — смотрите в предыдущем посте. Здесь будет чисто экспорт.
1
2
3
4
5
6
7
8
9
10
11
12
13
| if (isset($_POST['export_exсel'])) {
$t = time();
header("Content-Type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=download".$t .".csv");
$output = fopen("php://output", "w");
fputcsv($output, ['ID', 'Задача']);
foreach($jsonArray as $id => $arr) {
fputcsv($output, [$id, $arr]);
}
fclose($output);
exit;
} |
if (isset($_POST['export_exсel'])) {
$t = time();
header("Content-Type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=download".$t .".csv");
$output = fopen("php://output", "w");
fputcsv($output, ['ID', 'Задача']);
foreach($jsonArray as $id => $arr) {
fputcsv($output, [$id, $arr]);
}
fclose($output);
exit;
}

И запись в CSV из PHP

Искренне надеюсь, что у меня получилось донести до вас информацию на тему экспорта из PHP CSV файл, а это значит, что мы можем открывать его в Excel. Если что — пишите комментарии.
Добавить комментарий