ChuJALT
Aporte: Trabajar con archivos excel desde php. - Versión para impresión

+- ChuJALT (https://chujalt.com)
+-- Foro: LENGUAJES PROGRAMACIÓN (https://chujalt.com/forum-18.html)
+--- Foro: php (https://chujalt.com/forum-27.html)
+--- Tema: Aporte: Trabajar con archivos excel desde php. (/thread-26.html)



Trabajar con archivos excel desde php. - chujalt - 07-03-2021

Saludos.

En este post vamos a trabajar con un archivo excel desde php. Para este ejemplo vamos a trabajar con uno con dos columnas y 24 filas, Una de las columnas son horas (de 1 a 24) y en cada hora un precio, Si lo queréis bajar AQUI.

También necesitaremos un archivo para leer el archivo excel , se trata de excel_reader2.php, merito a su autor, te lo puedes bajar de AQUI.

Bien, manos a la obra, en primer lugar tendremos que cargar excel_reader2.php y el propio archivo excel, por lo que al principio de la página pondremos:

Código PHP:
<?php
require_once 'excel_reader2.php';
$data = new Spreadsheet_Excel_Reader("excel.xls");
?>

Ahora vamos a crear un array con los valores de las filas y columnas con las que queremos trabajar, pondremos:

Código PHP:
$pepe[1] = $data->raw(12);
$pepe[2] = $data->raw(22);
$pepe[3] = $data->raw(32);
$pepe[4] = $data->raw(42);
$pepe[5] = $data->raw(52);
$pepe[6] = $data->raw(62);
$pepe[7] = $data->raw(72);
$pepe[8] = $data->raw(82);
$pepe[9] = $data->raw(92);
$pepe[10] = $data->raw(102);
$pepe[11] = $data->raw(112);
$pepe[12] = $data->raw(122);
$pepe[13] = $data->raw(132);
$pepe[14] = $data->raw(142);
$pepe[15] = $data->raw(152);
$pepe[16] = $data->raw(162);
$pepe[17] = $data->raw(172);
$pepe[18] = $data->raw(182);
$pepe[19] = $data->raw(192);
$pepe[20] = $data->raw(202);
$pepe[21] = $data->raw(212);
$pepe[22] = $data->raw(222);
$pepe[23] = $data->raw(232);
$pepe[24] = $data->raw(242); 

Con esto tendremos un array con las 24 horas y el precio de cada una de ellas.
Vamos a ver el array, escribimos:

Código PHP:
print_r($pepe); 

y obtendremos:

Código:
Array ( [1] => 121,13838673 [2] => 119,52911591 [3] => 116,56370045 [4] => 113,88535263 [5] => 113,5654684 [6] => 114,06312135 [7] => 116,70671779 [8] => 117,69285692 [9] => 115,08610616 [10] => 114,66693383 [11] => 113,06913537 [12] => 110,99255973 [13] => 110,92340009 [14] => 111,20173737 [15] => 110,60698288 [16] => 110,49370675 [17] => 108,41762924 [18] => 108,57877114 [19] => 110,6906715 [20] => 112,97520268 [21] => 119,26980347 [22] => 121,53522841 [23] => 119,32600748 [24] => 117,68262512 )

Otra manera de ver los valores del array:

Código PHP:
var_dump($pepe); 

Y obtendremos:

Código:
array(24) { [1]=> float(121,13838673) [2]=> float(119,52911591) [3]=> float(116,56370045) [4]=> float(113,88535263) [5]=> float(113,5654684) [6]=> float(114,06312135) [7]=> float(116,70671779) [8]=> float(117,69285692) [9]=> float(115,08610616) [10]=> float(114,66693383) [11]=> float(113,06913537) [12]=> float(110,99255973) [13]=> float(110,92340009) [14]=> float(111,20173737) [15]=> float(110,60698288) [16]=> float(110,49370675) [17]=> float(108,41762924) [18]=> float(108,57877114) [19]=> float(110,6906715) [20]=> float(112,97520268) [21]=> float(119,26980347) [22]=> float(121,53522841) [23]=> float(119,32600748) [24]=> float(117,68262512) }

Ahora vamos a mostrar los valores ordenados de menor a mayor precio:

Código PHP:
asort($pepe);
var_export($pepe); 

Obtenermos:

Código:
array ( 17 => 108.41762924, 18 => 108.57877114, 16 => 110.49370675, 15 => 110.60698288, 19 => 110.69067149999999, 13 => 110.92340009, 12 => 110.99255973, 14 => 111.20173737, 20 => 112.97520268, 11 => 113.06913537, 5 => 113.5654684, 4 => 113.88535263, 6 => 114.06312135, 10 => 114.66693383, 9 => 115.08610616, 3 => 116.56370045, 7 => 116.70671779, 24 => 117.68262512, 8 => 117.69285692, 21 => 119.26980347, 23 => 119.32600748, 2 => 119.52911591, 1 => 121.13838672999999, 22 => 121.53522841, )

Vamos a Mostrar el precio mas bajo:

Código PHP:
echo min($pepe); 

Obtenemos:

Código:
108,41762924

Vamos a mostrar la hora en la que está el precio mas bajo:

Código PHP:
$min_keys = array(); 
foreach(
$pepe as $pepo => $pepi
 
   if($pepi == min($pepe)) array_push($min_keys$pepo); 

echo 
$min_keys[0]; 

y obtenemos:

Código:
17

En esta ocasión vamos a mostrar los precios de menor a mayor:

Código PHP:
foreach($pepe as $pepito){
 
   echo $pepito."<br>";


Con lo que obtendremos:

Código:
108,41762924
108,57877114
110,49370675
110,60698288
110,6906715
110,92340009
110,99255973
111,20173737
112,97520268
113,06913537
113,5654684
113,88535263
114,06312135
114,66693383
115,08610616
116,56370045
116,70671779
117,68262512
117,69285692
119,26980347
119,32600748
119,52911591
121,13838673
121,53522841

Vamos a mostrar los horarios de menor a mayor precio:

Código PHP:
$juan array_keys($pepe);
foreach(
$juan as $juanito){
 
   echo $juanito."<br>";


Y obtendremos:

Código:
17
18
16
15
19
13
12
14
20
11
5
4
6
10
9
3
7
24
8
21
23
2
1
22

Vamos a mostrar los horarios con el precio ordenados de menor a mayo:

Código PHP:
foreach ($pepe as $hora => $precio) {
 
   echo " A las $hora horas el precio será $precio.\n";
 
   echo "</p>";


Obtenemos:

Código:
A las 17 horas el precio será 108,41762924.
A las 18 horas el precio será 108,57877114.
A las 16 horas el precio será 110,49370675.
A las 15 horas el precio será 110,60698288.
A las 19 horas el precio será 110,6906715.
A las 13 horas el precio será 110,92340009.
A las 12 horas el precio será 110,99255973.
A las 14 horas el precio será 111,20173737.
A las 20 horas el precio será 112,97520268.
A las 11 horas el precio será 113,06913537.
A las 5 horas el precio será 113,5654684.
A las 4 horas el precio será 113,88535263.
A las 6 horas el precio será 114,06312135.
A las 10 horas el precio será 114,66693383.
A las 9 horas el precio será 115,08610616.
A las 3 horas el precio será 116,56370045.
A las 7 horas el precio será 116,70671779.
A las 24 horas el precio será 117,68262512.
A las 8 horas el precio será 117,69285692.
A las 21 horas el precio será 119,26980347.
A las 23 horas el precio será 119,32600748.
A las 2 horas el precio será 119,52911591.
A las 1 horas el precio será 121,13838673.
A las 22 horas el precio será 121,53522841.

Ahora vamos a mostrar el precio mas bajos que yo quiero, en esta ocasión el precio mas bajo y el cuarto mas bajo:

Código PHP:
echo $juan[0]."<br>";
echo 
$juan[3]; 

La salida será:

Código:
17
15

Vamos a calcular el valor medio del precio:

Código PHP:
$promedio=array_sum($pepe)/count($pepe); 
echo 
"El valor medio de hoy es: $promedio €"

Nos mostrará:

Código:
El valor medio de hoy es: 114,52755089167 €

Vamos a mostrar el precio de la hora actual de nuestro sistema y lo compara con la media:

Código PHP:
$tiempo getdate(time());
$hora $tiempo["hours"];
$valor_hora_actual $pepe[$hora];
echo 
"la hora actual es $hora horas<br>";
echo 
"el valor medio del día de hoy es $promedio <br>";
echo 
"el precio de esta hora es $valor_hora_actual <br>";
if (
$valor_hora_actual >= $promedio)
{
    echo 
"Esta hora es mas cara que la media";
}
else
{
    echo 
"Esta hora es mas barata que la media";
    } 

Y obtenemos:

Código:
la hora actual es 20 horas
el valor medio del día de hoy es 114,52755089167
el precio de esta hora es 112,97520268
Esta hora es mas barata que la media


Bueno, ya está, espero que le sirva a alguien de ayuda.

Saludos.