В прошлых статьях я показывал как можно вывести все строки из таблицы 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");

Переменную обязательно задать до цикла.