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