Экспорт данных в CSV файл (Excel) из PHP

    Комментариев нет 6338

export csv

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

Телеграм-канал serblog.ru

Демо

Экспорт в 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>

export-button-csv
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;
	}

Нажимаем кнопку экспорта и получаем CSV файл с данными:
test-export-csv-php

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

table-mysql

Если нужно экспортировать не все, а лишь некоторые ячейки таблицы, к примеру вы хотите из этой базы взять только Имя
Фамилию, то всего лишь нужно заменить пару строк кода:

5
fputcsv($output, array('Имя', 'Фамилия'));
10
fputcsv($output, [$row['first'], $row['description']]);

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

1
$t = time();

И изменить 3 строчку на:

3
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;
}

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

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

Любая сумма на развитие сайта

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *