В прошлых статьях я показывал как можно вывести все строки из таблицы MySql через PHP и как создавать Excel файл и записывать в него данные из PHP.
В этот раз мы немного усложним задачу и запишем данные в Excel из таблицы MySql, используя цикл while.
Возьмем к примеру нашу таблицу MySql, с полями Firstname, Lastname, Birthdate, Telephone, Company. В ней есть уже данные (строки) и требуется экспортировать их, создав файл Excel.
Во первых, нам понадобиться библиотека из прошлого занятия, для работы в Excel через PHP, скачать ее можно здесь.
Скрипт будет выглядеть следующим образом:
<?php
$link = mysqli_connect('localhost', 'user', '123456', 'mydb');
$query1 = mysqli_query($link, "SELECT * FROM Peolpe");
$myrow = mysqli_fetch_array($query1);
require_once 'PHPExcel/Classes/PHPExcel.php';
$phpexcel = new PHPExcel();
$page = $phpexcel->setActiveSheetIndex(0);
$page->setCellValue("A1", "id");
$page->setCellValue("B1", "Firstname");
$page->setCellValue("C1", "Lastname");
$page->setCellValue("D1", "Birthdate");
$page->setCellValue("E1", "Companyr");
$s = 2;
while($row=mysqli_fetch_array($query1))
{
$s++;
$page->setCellValue("A$s", $row['id']);
$page->setCellValue("B$s", $row['Firstname']);
$page->setCellValue("C$s", $row['Lastname']);
$page->setCellValue("D$s", $row['Birthdate']);
$page->setCellValue("E$s", $row['Companyr']);
}
$page->setTitle("Example");
$objWriter = PHPExcel_IOFactory::createWriter($phpexcel, 'Excel2007');
$objWriter->save("example.xlsx");
?>
Теперь поясним наши действия:
1. Вначале устанавливаем соединение с БД:
$link = mysqli_connect('localhost', 'user', '123456', 'mydb');
2. Выполняем запрос: ВЫБРАТЬ все записи ИЗ таблицы People и сразу записываем результат запроса в массив:
$query1 = mysqli_query($link, "SELECT * FROM Peolpe");
$myrow = mysqli_fetch_array($query1);
3. Подключаем библиотеку для работы с Эксель:
require_once 'PHPExcel/Classes/PHPExcel.php';
4. Далее, по знакомой нам технологии, создаем файл Excel и делаем в нем шапку с полями id, Firstname, Lastname, Birthdate, Telephone, Company:
$phpexcel = new PHPExcel();
$page = $phpexcel->setActiveSheetIndex(0);
$page->setCellValue("A1", "id");
$page->setCellValue("B1", "Firstname");
$page->setCellValue("C1", "Lastname");
$page->setCellValue("D1", "Birthdate");
$page->setCellValue("E1", "Companyr");
5. Далее идет самое интересное. Как мы видим в полях A1, B1, C1, D1, E1 располагается шапка таблицы. Соответственно первая строка с данными должна быть в полях A2, B2, C2, D2, E2, вторая в A3, B3, C3, D3, E3 и так далее.
То есть число после буквы увеличивается с каждой строкой на 1, начиная с 2.
Решение задачи:
задаем переменную $s = 2 и при помощи инкремента (увеличения на 1) $s++ задаем номер каждой новой строки Excel, далее циклом перебираем массив и каждый новый элемент таблицы MySql записывается в новую строку:
$s = 2;
while($row=mysqli_fetch_array($query1))
{
$s++;
$page->setCellValue("A$s", $row['id']);
$page->setCellValue("B$s", $row['Firstname']);
$page->setCellValue("C$s", $row['Lastname']);
$page->setCellValue("D$s", $row['Birthdate']);
$page->setCellValue("E$s", $row['Companyr']);
}
$page->setTitle("Example");
$objWriter = PHPExcel_IOFactory::createWriter($phpexcel, 'Excel2007');
$objWriter->save("example.xlsx");
Переменную обязательно задать до цикла.