Layout di foglio Excel generato con PhpSpreadsheet

DiegoPTn

Nuovo Utente
9 Apr 2020
12
0
1
Trento
Ciao a tutti.
Ho un foglio Excel generato da PhpSpreadsheet leggendo i dati da un array. Il layout è il seguente :

N.Camera - Data - Occupazione
1 – 13/01/20 – 4
2 – 13/01/20 – 7
3 – 13/01/20 – 3
1 – 14/01/20 – 5
2 – 14/01/20 – 8
3 – 14/01/20 – 6

Io avrei bisogno però che i dati fossero impaginati in questo modo :
Data – camera 1 – camera 2 – camera 3
13/01/20 – 4 – 7 – 3
14/01/20 – 5 – 8 – 6

Considerando che lo script php che uso è quello che riporto di seguito, mi sapete dire come si fa a impaginare i dati ?

$csv = '"data","id camera", "disponibilita"' . "\n";
foreach($d_json['availabilities'] as $item)
{
$csv .= ''.$item['date'].', '.$item['room_type_id'].','.$item['real_availability'][0]. '' . "\n";
}

// (a) converto la stringa $CSV in un ARRAY
$stringa = $csv;
$a = explode(',', $stringa);

$spreadsheet->getActiveSheet()
->fromArray($a,NULL);

// (b) salvo il risultato nel file xlsx
$writer = new Xlsx($spreadsheet);
$writer->save('Prova.xlsx');


Grazie e buona giornata.
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Immaginando il tuo file d'ingresso (lo si può solo intuire da come hai scritto) vedi se una cosa del genere va bene

PHP:
class RoomService {

   public $input=[];

   public $intest=[];

   public $output=[];

   public function __construct($opts=[]) {
      array_walk($opts,function($v,$k){
         (property_exists($this,$k))?$this->$k=$v:null;
      });
   }


   public static function getInstance($opts=[]){
      return (new self($opts));
   }

   public function createSpreadSheets(){
      $map=['createIntest','splitData',];
      array_map(function($elem){
         call_user_func([$this,$elem]);
      },$map);
      return $this;
   }

   private function createIntest(){
      $this->intest=['date'];
      foreach ($this->input as $elem){
         (!in_array('camera_'.$elem['room_type_id'],$this->intest))?$this->intest[]='camera_'.$elem['room_type_id']:null;
      }
   }
   private function splitData(){
      $local=[];
      foreach ($this->input as $elem){
         (!isset($local[strtotime($elem['date'])]))?$local[strtotime($elem['date'])]=[]:null;
         foreach ($this->intest as $intest){
            (!isset($local[strtotime($elem['date'])][$intest]))?$local[strtotime($elem['date'])][$intest]=0:null;
         }
         (isset($local[strtotime($elem['date'])]['camera_'.$elem['room_type_id']]))?$local[strtotime($elem['date'])]['camera_'.$elem['room_type_id']]+=$elem['real_availability'][0]:$local[strtotime($elem['date'])]['camera_'.$elem['room_type_id']]=$elem['real_availability'][0];
         $local[strtotime($elem['date'])]['date']=$elem['date'];
         ksort($local[strtotime($elem['date'])]);
      }
      ksort($local);
      $this->output=array_values($local);
   }
}
Dati da passare
PHP:
$data[]=[
   'date'=>'2020-01-'.rand(13,17),
   'room_type_id'=>rand(1,4),
   'real_availability'=>[rand(4,8)]
];

Per invocare la classe basta questa linea di codice (naturalmente la variabile data deve essere nel formato di cui sopra)
PHP:
$result=RoomService::getInstance(['input'=>$data])->createSpreadSheets()->output;
print_r($result);

Good Luck
 

DiegoPTn

Nuovo Utente
9 Apr 2020
12
0
1
Trento
Scusa se ne approfitto, ma visto che ho trovato uno che ne sa, volevo chiederti un'altra cosa sempre relativa al layout.
Non capisco perchè sul foglio excel generato ("Prova.xlsx") tutto l'array esce sulla riga 1 (separato correttamente cella per cella) anzichè uscire in riga/colonna, in questo modo:

data id camera disponibilita
2020-04-03 3 4
2020-04-03 24 8
2020-04-03 25 2
2020-04-03 2 5
2020-04-03 26 6
2020-04-03 1 3
2020-04-03 4 3
2020-04-03 27 2
2020-04-03 28 5
2020-04-03 23 1
2020-04-03 5 15

Il codice che utilizzo è il seguente (salto le parti di connessione al web service per non dilungarmi troppo):
PHP:
<?php

...

//echo"<h2>CONVERTO JSON IN ARRAY PHP:</h2>";

$d_json = json_decode($response, true);


$csv = 'data,id camera,disponibilita,' . "\n";

foreach($d_json['availabilities'] as $item)

{

     $csv .= ''.$item['from'].',' . $item['room_type_id'].','.$item['real_availability'][0].','.'' . "\n";

}


// carico la librerie PHPSPREADSHEET

require 'lib/vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;

use PhpOffice\PhpSpreadsheet\Writer\Xlsx;


// carico il file Prova.xlsx

$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();

$reader->setReadDataOnly(true);

$spreadsheet = $reader->load("Prova.xlsx");


// SCRIVO IL CONTENUTO DELL'ARRAY NEL FILE XLSX:

// MI POSIZIONO SUL FOGLIO ACTUAL

$spreadsheet->setActiveSheetIndexByName('actual');

// (a) converto la stringa $CSV in un ARRAY

  $arrayData = $csv;

  $a = explode(',', $arrayData);


$spreadsheet->getActiveSheet()

    ->fromArray($a,NULL);


// (b) salvo il risultato nel file xlsx

$writer = new Xlsx($spreadsheet);

$writer->save('Prova.xlsx');

?>
Puoi dirmi dove sbaglio ? Grazie ancora
 
Ultima modifica di un moderatore:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.449
338
83
@DiegoPTn

Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
PHP (2).png
quando posti del codice php, oppure la funzione codice dalla barra degli strumenti
box inserisci.png

Inoltre IMPORTANTE: Prima di creare una nuova discussione o di rispondere alle discussioni esistenti ricordati di leggere attentamente il Regolamento del Forum e l'eventuale regolamento specifico della sezione!
Grazie


Per questa volta te lo sistemo io ma mi raccomando per il futuro altrimenti sarò costretto a cancellare le discussioni
 
Discussioni simili
Autore Titolo Forum Risposte Data
felino Bug estetici del nuovo layout Supporto Mr.Webmaster 1
A [WordPress] Elementor responsive layout WordPress 8
Andrea_Ventura [HTML] Realizzazione di un layout dinamico di immagini HTML e CSS 4
Andrea_Ventura [HTML] Layout multicolonna (no table) HTML e CSS 2
L border in tabella php + layout stampa PHP 0
crealatualista [PHP] layout pagina con immagine codice a barre PHP 3
utente css esterno con layout HTML e CSS 1
F layout stampa css HTML e CSS 2
G Java & layout Java 2
M Layout e menu mobile HTML e CSS 2
M Problema con il layout HTML e CSS 3
R Dubbi Incolonnamento Layout con Bootstrap. HTML e CSS 1
Marco_88 Problemi layout con firefox HTML e CSS 3
felino Adattare un layout desktop ad un responsive HTML e CSS 9
K Aggiornare solo una parte di Layout Sviluppo app per Android 0
A Consiglio su layout responsive HTML e CSS 3
E layout responsive problemi con google chrome su smartphone android e win 8 HTML e CSS 0
D Tabella con layout per smartphone HTML e CSS 2
G Javascript library layout Javascript 1
S problema di layout HTML e CSS 5
Devil-94 Layout html css HTML e CSS 1
giap Layout come questo sito HTML e CSS 4
P proprietà Position in layout liquido... HTML e CSS 0
A Layout stabile per varie risoluzioni HTML e CSS 0
L preview di una textarea con layout del sito PHP 2
felino Nuovo layout del forum Supporto Mr.Webmaster 7
V Layout fragment main Sviluppo app per Android 1
L Layout flessibile con css. Voi come fate? HTML e CSS 1
X Dimensioni pagina scegliere layout HTML e CSS 2
A inserire background con gradiente in un layout Sviluppo app per Android 1
S Visualizzazione errata del layout e dei font del sito HTML e CSS 1
R inserire menu spry in layout a griglia fluida HTML e CSS 1
L Problema dimensione layout WordPress 1
L Consiglio su layout css... HTML e CSS 2
I Shape5-Vertex Template - sistemazione layout Joomla 1
A Problema gestione layout con css HTML e CSS 11
M Layout fluido HTML e CSS 13
M Layout e zoom HTML e CSS 1
F layout fluido HTML e CSS 4
L Cambiare contenuto senza modificare il layout PHP 6
F problema con layout fluido HTML e CSS 1
Y corrispondenza misure portando un layout da photoshop in html/css Photoshop 0
P inserire elementi dotati di dimensione propria in layout a griglia fluida HTML e CSS 5
P Layout a griglia fluida vs. animazioni flash HTML e CSS 0
M Layout compatibile per ogni browser HTML e CSS 3
L Feedback - design / layout per un sito dedicato ai Tablet PC Presenta il tuo Sito 2
J A corto di layout HTML e CSS 2
nim layout fluido HTML e CSS 4
M immagini e layout fluido HTML e CSS 0
neo996sps Estrarre i dati e presentarli con un layout particolare PHP 0

Discussioni simili