excel php

Пример получения данных из электронных таблиц Excel и LibreOffice Calc в PHP

В данном уроке мы научимся взаимодействовать с таблицами Excel. А именно, мы научимся получать данные из ячеек таблицы, научимся обрабатывать эти данные, и рассмотрим пример, как можно выводить уже обработанную информацию в браузере.

Небольшое предисловие и пояснение к данному уроку.

С наступлением холодов, в 2022 году, российская федерация начала обстреливать объекты критической инфраструктуры Украины. В результате этого, электростанции вынуждены были ввести график почасового отключения электроэнергии.

Улицы были разделены на 3 очереди. При невысокой нагрузке на электростанции, электричество подавалось по следующему принципу: одна очередь, без электричества, две – с электричеством. То есть если, например, на улицах, которые входят в первую очередь света нет, то улицы второй и третьей очереди со светом. Затем, улицы первой и третьей очереди со светом, а вторая очередь без света. Потом третья очередь без света, а первая и вторая со светом. 

При более-менее меньшей интенсивности обстрелов, график был следующим: 4 часа электричество подаётся, а 2 два часа – нет.

При интенсивных обстрелах и попаданиях в электростанции, свет отключали по следующей схеме: 2 часа электричество подаётся, 4 часа – нет. То есть приходилось отключать две очереди одновременно. И тогда принцип был такой, если у первой очереди свет есть, то вторая и третья – без света. Если у второй свет есть, то первая и третья без света. Если у третьей свет есть, то первая и вторая без света.

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

Но, для большего удобства, я решил написать ещё и небольшую программу на PHP, с помощью которой человек мог бы выбрать интересующую его дату и посмотреть какой график отключения будет именно в этот день.

Из этой задумки и получился хороший материал для урока по работе с таблицами Excel.

Библиотека PhpSpreadsheet

Для создания программы, мне понадобилась библиотека PhpSpreadsheet:

  1. Скачать PhpSpreadsheet можно тут https://github.com/PHPOffice/PhpSpreadsheet
  2. Официальный сайт и документация тут https://phpspreadsheet.readthedocs.io/en/latest/

PhpSpreadsheet – это библиотека, написанная на чистом PHP, которая предлагает набор классов, позволяющих читать и записывать разные форматы файлов электронных таблиц, например Excel и LibreOffice Calc.

Получение данных из Excel

<form method="POST">
	<select name="user_date" required="required">
	  <option value="">Оберіть дату</option>
	  <option value="1">01</option>
	  <option value="2">02</option>
	  <option value="3">03</option>
	  <option value="4">04</option>
	  <option value="5">05</option>
	  <option value="6">06</option>
	  <option value="7">07</option>
	  <option value="8">08</option>
	  <option value="9">09</option>
	  <option value="10">10</option>
	  <option value="11">11</option>
	  <option value="12">12</option>
	  <option value="13">13</option>
	  <option value="14">14</option>
	  <option value="15">15</option>
	  <option value="16">16</option>
	  <option value="17">17</option>
	  <option value="18">18</option>
	  <option value="19">19</option>
	  <option value="20">20</option>
	  <option value="21">21</option>
	  <option value="22">22</option>
	  <option value="23">23</option>
	  <option value="24">24</option>
	  <option value="25">25</option>
	  <option value="26">26</option>
	  <option value="27">27</option>
	  <option value="28">28</option>
	  <option value="29">29</option>
	  <option value="30">30</option>
	  <option value="31">31</option>
	</select>
<hr>
    <input type="submit" name="grafik1" value="Графік -4+2 (таблиця)" />
	<input type="submit" name="grafik2" value="Графік -2+4 (таблиця)" />
	<input type="submit" name="grafik3" value="Графік -4+2 (список)" />
	<input type="submit" name="grafik4" value="Графік -2+4 (список)" />
	<input type="submit" name="allList" value="Обидва варіанти" />
</form>
<hr>
<form method="POST">
	<input type="submit" name="grafikToday" value="Графік на сьогодні (список)" />
	<input type="submit" name="grafikTomorrow" value="Графік на завтра (список)" />
</form>
<hr>

<?php
	//підключаємо бібліотеку Spreadsheet
	require_once 'PhpSpreadsheet-master/src/PhpSpreadsheet/Spreadsheet.php';	
	require 'PhpSpreadsheet-master/vendor/autoload.php';
	
	use PhpOffice\PhpSpreadsheet\Spreadsheet;
	use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
	use PhpOffice\PhpSpreadsheet\IOFactory;
	
	$excel = \PhpOffice\PhpSpreadsheet\IOFactory::load('grafik.xls');
	
	//Виводимо графік 4 години немає світла, 2 години – є	
	if(isset($_POST['grafik1'])) {
		tableFourTwo();
	}

	//Виводимо графік 2 години немає світла, 4 години – є	
	if(isset($_POST['grafik2'])) {
		tableTwoFour();
	}

	//Виводимо графік 4 години немає світла, 2 години – є (списком)
	if(isset($_POST['grafik3'])) {
		listFourTwo();
	}

	//Виводимо графік 2 години немає світла, 4 години – є (списком)
	if(isset($_POST['grafik4'])) {
		listTwoFour();
	}

	//Виводимо обидва графіки списком
	if(isset($_POST['allList'])) {
		listFourTwo();
		listTwoFour();
	}
	
	//Виводимо графік на сьогодні
	if(isset($_POST['grafikToday'])) {
		listToday();
	}
	
	//Виводимо графік на завтра
	if(isset($_POST['grafikTomorrow'])) {
		listTomorrow();
	}

// Функція виводу графіка за схемою 4 години немає світла, 2 години – є (у вигляді таблиці)
function tableFourTwo() {
	
	$excel = \PhpOffice\PhpSpreadsheet\IOFactory::load('grafik.xls');
	
	$userDate = $_POST['user_date']; // отримуємо дату що обрав користувач в випадаючому списку
	
// цикл for (присвоюємо змінній DateTurtOf значення 3 бо колонки з годинами починаються з 3-ї
// потім проходимо по колонках і вибираємо час відключення та для якої черги цей час діє
// результат виводимо на екран
echo '<h2>⚡Графік ВІДКЛЮЧЕННЯ електроенергії<br>на ' . $userDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br><table width="600" border="1"><tr><td>Перша черга</td><td>Друга черга</td><td>Третя черга</td></tr>';

		for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
			$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
			// перевірка і розподіл по чергам
			$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
				if ($cherga == '1 (та 3) черга') {
					echo '<tr><td>' . $timeOf . '</td><td>' . '-----' . '</td><td>' . $timeOf;
				} else if ($cherga == '2 (та 1) черга') {
					echo '<tr><td>' . $timeOf . '</td><td>' . $timeOf . '</td><td>' . '-----';
					
				} else if ($cherga == '3 (та2) черга') {
					echo '<tr><td>' . '-----' . '</td><td>' . $timeOf . '</td><td>' . $timeOf;
					
				}
			$DateTurtOf = $DateTurtOf++;
		}
		echo '</td></tr></table>'; // закінчуємо таблицю з відключенням		
		
echo '<h2>⚡Графік ВКЛЮЧЕННЯ електроенергії<br>на ' . $userDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br><table width="600" border="1"><tr><td>Перша черга</td><td>Друга черга</td><td>Третя черга</td></tr>';

		for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
			$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();

			$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
				if ($cherga == '1 (та 3) черга') {
					echo '<tr><td>' . '-----' . '</td><td>' . $timeOf . '</td><td>' . '-----';
				} else if ($cherga == '2 (та 1) черга') {
					echo '<tr><td>' . '-----' . '</td><td>' . '-----' . '</td><td>' . $timeOf;
					
				} else if ($cherga == '3 (та2) черга') {
					echo '<tr><td>' . $timeOf . '</td><td>' . '-----' . '</td><td>' . '-----';
					
				}
			$DateTurtOf = $DateTurtOf++;
		}
		echo '</td></tr></table>';
}

// Функція виводу графіка за схемою 2 години немає світла, 4 години – є (у вигляді таблиці)
function tableTwoFour() {
	
	$excel = \PhpOffice\PhpSpreadsheet\IOFactory::load('grafik.xls');	
$userDate = $_POST['user_date'];
	
echo '<h2>⚡Графік ВІДКЛЮЧЕННЯ електроенергії<br>на ' . $userDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br><table width="600" border="1"><tr><td>Перша черга</td><td>Друга черга</td><td>Третя черга</td></tr>';

		for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
			$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();

			$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
				if ($cherga == '1 (та 3) черга') {
					echo '<tr><td>' . $timeOf . '</td><td>' . '-----' . '</td><td>' . '-----';
				} else if ($cherga == '2 (та 1) черга') {
					echo '<tr><td>' . '-----' . '</td><td>' . $timeOf . '</td><td>' . '-----';
					
				} else if ($cherga == '3 (та2) черга') {
					echo '<tr><td>' . '-----' . '</td><td>' . '-----' . '</td><td>' . $timeOf;
					
				}
			$DateTurtOf = $DateTurtOf++;
		}
		echo '</td></tr></table>';
		
		
echo '<h2>⚡Графік ВКЛЮЧЕННЯ електроенергії<br>на ' . $userDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br><table width="600" border="1"><tr><td>Перша черга</td><td>Друга черга</td><td>Третя черга</td></tr>';

		for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
			$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();

			$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
				if ($cherga == '1 (та 3) черга') {
					echo '<tr><td>' . '-----' . '</td><td>' . $timeOf . '</td><td>' . $timeOf;
				} else if ($cherga == '2 (та 1) черга') {
					echo '<tr><td>' . $timeOf . '</td><td>' . '-----' . '</td><td>' . $timeOf;
					
				} else if ($cherga == '3 (та2) черга') {
					echo '<tr><td>' . $timeOf . '</td><td>' . $timeOf . '</td><td>' . '-----';
					
				}
			$DateTurtOf = $DateTurtOf++;
		}
		echo '</td></tr></table>';
}

// Функція виводу графіка за схемою 4 години немає світла, 2 години – є (у вигляді списка)
function listFourTwo() {
	
	$excel = \PhpOffice\PhpSpreadsheet\IOFactory::load('grafik.xls');	
	$userDate = $_POST['user_date'];

	echo '<h2>⚡Графік ВІДКЛЮЧЕННЯ електроенергії<br>на ' . $userDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br>📌ЯКЩО БУДЕ ДІЯТИ ГРАФІК 4 ГОДИНИ НЕМАЄ ЕЛЕКТРОЕНЕРГІЇ, 2 ГОДИНИ – Є, ТО СВІТЛА НЕ БУДЕ В ТАКІ ГОДИНИ:<br>1️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
					if ($cherga == '1 (та 3) черга' or $cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
	echo '<br>2️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
					if ($cherga == '2 (та 1) черга' or $cherga == '3 (та2) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}	
	echo '<br>3️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга' or $cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}

	echo '<h2>⚡Графік ВКЛЮЧЕННЯ електроенергії<br>на ' . $userDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br>📌ЯКЩО БУДЕ ДІЯТИ ГРАФІК 4 ГОДИНИ НЕМАЄ ЕЛЕКТРОЕНЕРГІЇ, 2 ГОДИНИ – Є, ТО СВІТЛО БУДЕ В ТАКІ ГОДИНИ:<br>1️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
	echo '<br>2️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
					if ($cherga == '1 (та 3) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}	
	echo '<br>3️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
					if ($cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
}

// Функція виводу графіка за схемою 2 години немає світла, 4 години – є (у вигляді списка)
function listTwoFour() {
	
	$excel = \PhpOffice\PhpSpreadsheet\IOFactory::load('grafik.xls');
	
	$userDate = $_POST['user_date'];

	echo '<h2>⚡Графік ВІДКЛЮЧЕННЯ електроенергії<br>на ' . $userDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br>📌ЯКЩО БУДЕ ДІЯТИ ГРАФІК 2 ГОДИНИ НЕМАЄ ЕЛЕКТРОЕНЕРГІЇ, 4 ГОДИНИ – Є, ТО СВІТЛА НЕ БУДЕ В ТАКІ ГОДИНИ:<br>1️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
					if ($cherga == '1 (та 3) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
	echo '<br>2️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
					if ($cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}	
	echo '<br>3️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}

	echo '<h2>⚡Графік ВКЛЮЧЕННЯ електроенергії<br>на ' . $userDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br>📌ЯКЩО БУДЕ ДІЯТИ ГРАФІК 2 ГОДИНИ НЕМАЄ ЕЛЕКТРОЕНЕРГІЇ, 4 ГОДИНИ – Є, ТО СВІТЛО БУДЕ В ТАКІ ГОДИНИ:<br>1️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга' or $cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
	echo '<br>2️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга' or $cherga == '1 (та 3) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}	
	echo '<br>3️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($userDate+2, $DateTurtOf)->getValue();
					if ($cherga == '1 (та 3) черга' or $cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
}

// Вивід графіка на сьогодні
function listToday() {
	$curDate = date('j'); // поточна дата (тільки число, без нуля на початку)	
	
	$excel = \PhpOffice\PhpSpreadsheet\IOFactory::load('grafik.xls');

	echo '<h2>⚡Графік ВІДКЛЮЧЕННЯ електроенергії<br>на ' . $curDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br>📌ЯКЩО БУДЕ ДІЯТИ ГРАФІК 4 ГОДИНИ НЕМАЄ ЕЛЕКТРОЕНЕРГІЇ, 2 ГОДИНИ – Є, ТО СВІТЛА НЕ БУДЕ В ТАКІ ГОДИНИ:<br>1️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($curDate+2, $DateTurtOf)->getValue();
					if ($cherga == '1 (та 3) черга' or $cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
	echo '<br>2️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($curDate+2, $DateTurtOf)->getValue();
					if ($cherga == '2 (та 1) черга' or $cherga == '3 (та2) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}	
	echo '<br>3️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($curDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга' or $cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}

	echo '<hr><h2>⚡Графік ВКЛЮЧЕННЯ електроенергії<br>на ' . $curDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br>📌ЯКЩО БУДЕ ДІЯТИ ГРАФІК 4 ГОДИНИ НЕМАЄ ЕЛЕКТРОЕНЕРГІЇ, 2 ГОДИНИ – Є, ТО СВІТЛО БУДЕ В ТАКІ ГОДИНИ:<br>1️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($curDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
	echo '<br>2️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($curDate+2, $DateTurtOf)->getValue();
					if ($cherga == '1 (та 3) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}	
	echo '<br>3️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($curDate+2, $DateTurtOf)->getValue();
					if ($cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
	
	echo '<hr><h2>⚡Графік ВІДКЛЮЧЕННЯ електроенергії<br>на ' . $curDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br>📌ЯКЩО БУДЕ ДІЯТИ ГРАФІК 2 ГОДИНИ НЕМАЄ ЕЛЕКТРОЕНЕРГІЇ, 4 ГОДИНИ – Є, ТО СВІТЛА НЕ БУДЕ В ТАКІ ГОДИНИ:<br>1️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($curDate+2, $DateTurtOf)->getValue();
					if ($cherga == '1 (та 3) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
	echo '<br>2️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($curDate+2, $DateTurtOf)->getValue();
					if ($cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}	
	echo '<br>3️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($curDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}

	echo '<hr><h2>⚡Графік ВКЛЮЧЕННЯ електроенергії<br>на ' . $curDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br>📌ЯКЩО БУДЕ ДІЯТИ ГРАФІК 2 ГОДИНИ НЕМАЄ ЕЛЕКТРОЕНЕРГІЇ, 4 ГОДИНИ – Є, ТО СВІТЛО БУДЕ В ТАКІ ГОДИНИ:<br>1️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($curDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга' or $cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
	echo '<br>2️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($curDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга' or $cherga == '1 (та 3) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}	
	echo '<br>3️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($curDate+2, $DateTurtOf)->getValue();
					if ($cherga == '1 (та 3) черга' or $cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
}

// Вивід графіка на завтра
function listTomorrow() {
	$tomDate = date('j')+1; // поточна дата плюс 1 щоб отримати завтрішню дату
	
	$excel = \PhpOffice\PhpSpreadsheet\IOFactory::load('grafik.xls');

	echo '<h2>⚡Графік ВІДКЛЮЧЕННЯ електроенергії<br>на ' . $tomDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br>📌ЯКЩО БУДЕ ДІЯТИ ГРАФІК 4 ГОДИНИ НЕМАЄ ЕЛЕКТРОЕНЕРГІЇ, 2 ГОДИНИ – Є, ТО СВІТЛА НЕ БУДЕ В ТАКІ ГОДИНИ:<br>1️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($tomDate+2, $DateTurtOf)->getValue();
					if ($cherga == '1 (та 3) черга' or $cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
	echo '<br>2️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($tomDate+2, $DateTurtOf)->getValue();
					if ($cherga == '2 (та 1) черга' or $cherga == '3 (та2) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}	
	echo '<br>3️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($tomDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга' or $cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}

	echo '<hr><h2>⚡Графік ВКЛЮЧЕННЯ електроенергії<br>на ' . $tomDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br>📌ЯКЩО БУДЕ ДІЯТИ ГРАФІК 4 ГОДИНИ НЕМАЄ ЕЛЕКТРОЕНЕРГІЇ, 2 ГОДИНИ – Є, ТО СВІТЛО БУДЕ В ТАКІ ГОДИНИ:<br>1️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($tomDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
	echo '<br>2️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($tomDate+2, $DateTurtOf)->getValue();
					if ($cherga == '1 (та 3) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}	
	echo '<br>3️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($tomDate+2, $DateTurtOf)->getValue();
					if ($cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
	
	echo '<hr><h2>⚡Графік ВІДКЛЮЧЕННЯ електроенергії<br>на ' . $tomDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br>📌ЯКЩО БУДЕ ДІЯТИ ГРАФІК 2 ГОДИНИ НЕМАЄ ЕЛЕКТРОЕНЕРГІЇ, 4 ГОДИНИ – Є, ТО СВІТЛА НЕ БУДЕ В ТАКІ ГОДИНИ:<br>1️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($tomDate+2, $DateTurtOf)->getValue();
					if ($cherga == '1 (та 3) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
	echo '<br>2️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($tomDate+2, $DateTurtOf)->getValue();
					if ($cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}	
	echo '<br>3️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($tomDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}

	echo '<hr><h2>⚡Графік ВКЛЮЧЕННЯ електроенергії<br>на ' . $tomDate . ' грудня⚡</h2>❗Увага❗<br>⚠️Графік ОРІЄНТОВНИЙ. Це означає, що він може НЕ діяти (і скоріш за все НЕ ДІЯТИМЕ) при застосуванні аварійних відключень, або у разі якщо НЕК Укренерго зменшить ліміт потужності в області.<br><br>📌ЯКЩО БУДЕ ДІЯТИ ГРАФІК 2 ГОДИНИ НЕМАЄ ЕЛЕКТРОЕНЕРГІЇ, 4 ГОДИНИ – Є, ТО СВІТЛО БУДЕ В ТАКІ ГОДИНИ:<br>1️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($tomDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга' or $cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
	echo '<br>2️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($tomDate+2, $DateTurtOf)->getValue();
					if ($cherga == '3 (та2) черга' or $cherga == '1 (та 3) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}	
	echo '<br>3️⃣ черга:<br>';

			for ($DateTurtOf=3; $DateTurtOf<14; $DateTurtOf++) {
				$timeOf = $excel->getActiveSheet()->getCellByColumnAndRow(1, $DateTurtOf)->getValue();
				$cherga = $excel->getActiveSheet()->getCellByColumnAndRow($tomDate+2, $DateTurtOf)->getValue();
					if ($cherga == '1 (та 3) черга' or $cherga == '2 (та 1) черга') {
						echo $timeOf . '<br>';
					}
				$DateTurtOf = $DateTurtOf++;
			}
}
?>

Файлы, которые использовались при создании программы

График отключения света в формате XLS – Скачать

Библиотека PhpSpreadsheet – Скачать

Main Menu