Script php: Leggere file xls di excel con php

   difficoltà:  script script script script script

Script simili
16/10/2006


Per leggere un file xls di excel con php faremo uso in questo script della classe ExcelReader che ci faciliterà come vedremo di molto il compito.
Per prima cosa scarichiamo la classe ExcelReader, estraiamo il contenuto e teniamo buona la cartella excel in cui ci sono i due file reader.php e oleread.inc che includeremo nel nostro script.
Nella nostra cartella avremo quindi la cartella excel sopra citata, il nostro file xls che chiamiamo file_excel.xls e leggi_excel.php che è il nostro script.
Dopo aver inizializzato la classe con

$data->read('file_excel.xls');
settiamo il nome del file da leggere, dopodichè facciamo un ciclo per ogni riga e colonna:
$data->sheets[0]['numRows'];
$data->sheets[0]['numCols'];
rappresentano rispettivamente il numero di righe e colonne contenute nel file excel.
A questo punto preleveremo il valore contenuto in ogni cella:
$data->sheets[0]['cells'][$i][$j];
dove $i è la riga e $j è la colonna.

Ecco lo script completo per mostrare a video i dati contenuti nel file file_excel.xls in una tabella:
<?
require_once 'Excel/reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251'); // Set output Encoding.
$data->read('file_excel.xls');
error_reporting(E_ALL ^ E_NOTICE);

echo "<table border='1'>";
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
echo "<tr>";
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
echo "<td>".$data->sheets[0]['cells'][$i][$j]."</td>";
}
echo "</tr>";

}
echo "</table>";
?>
Questo script mostra solamente a video i dati prelevati dal file, ma chiaramente gli usi possono essere molteplici, ad esempio l'importazione dei dati da file excel a database.

Social:


Donazione:
Se questo script ti è stato utile e ti ho fatto risparmiare tempo e denaro fai una
qualsiasi cifra è ben accetta! 1€, 3€, 5€ ,10€, 50€ ;-) fai te!

Permalink: Tag:
script   php   excel   xls  
Script Simili: Permalink: Link utili:
Tools:
Feed RSS    



Commenti


  Lfredo

28/2/2007 13:06:09

Visto che questa pagina non riporta il nome dell'autore, vorrei lasciare, invece di un commento, un sentito ringraziamento a quanti vi hanno lavorato. Sentito perchè questo script sarà la base da cui posso partire per evitare al mio pool di caricare in db dei file Excel a manella. Non è poca cosa poter far fare ad un programma il lavoro di caricare 3.123.702 cartelle Excel. Ancora grazie.
Alfredo

  Mr Son

19/3/2007 6:26:16

Tel me about

  Roberto

24/10/2007 11:14:18

Volevo segnalare che nel file
Excel/reader.php

occorre modificare
require_once 'Spreadsheet/Excel/Reader/OLERead.php';
in
require_once 'oleread.inc';

Saluti
:O)


  Victor

24/10/2007 12:11:24

C'è un errore...
cerca questo file:
require_once 'Spreadsheet/Excel/Reader/OLERead.php';
Ma questo file non è presente da nessuna parte...

  Victor

24/10/2007 12:20:49

EDIT: ok, ho letto ora il commento di roberto..
provveduto, ed ora funziona ;)
grazie miille a roberto e, ovviamente, a chi ha creato il codice ^_^

  Aldus

26/10/2007 17:19:36

Ciao a tutti.
Lanciando il file example.php ottengo questo errore:
Fatal error: Maximum execution time of 30 seconds exceeded in D:\preventivi\Excel\oleread.inc on line 172
Potete aiutarmi? Grazie Ciao


  Fabio

26/10/2007 17:24:13

30 secondi è il limite di default per l'esecuzione degli script. Se carichi un file molto grande potrebbe servirti più tempo. Metti in testa alla pagina:

set_time_limit(500);

al posto di 500 fai un po' di prove e metti un numero di secondi adatto. magari bastano 120.

  fabio

10/12/2007 16:53:31

Salve a tutti,
molto bella la classe...ma:
ho un problemino nella lettura di una cella contente testo più lungo di 208 caratteri....stavo analizzando la classe per vedere se c'era un limite di lettura del buffer dell'ole..
voi ne sapete qualcosa?

  Valerio

11/1/2008 22:26:07

ho un problema con delle celle di excel che contengono date in formato gg/mm/aaaa che, quando lette da questo script, restituiscono questo notice: Notice: Undefined variable: formatstr in C:\www\Excel\reader.php on line 635. Come posso risolvere la cosa?

  dada

21/7/2008 11:51:32

scusate la mia ignoranza
come posso utilizzare lo script per visualizzare il file con flash?

  dada

28/7/2008 9:02:02

niente ho risolto
grazie lo stesso!

  claudio

25/8/2008 9:50:28

ciao. io ho un problema con questo script, non legge il file excel. Ho provato con tanti, ma non legge nessuno, mi da questo errore:
The filename .... is not readable
e sempre cosi. Forse perche uso excel 2007, che non salva piu i file in formato .xls ma in .xlsx.
Ho provato a modificare l'estensione, il file funziona lo stesso con .xls ma lo script non lo legge. Neanche se provo a far leggere allo script l'estensione .xlsx non va...

esiste qualche soluzione ?
grazie

  Fabio

25/8/2008 10:00:24

Prova quando salvi il file a scegliere salva file con nome e in tipo file scegliere ka versione 97-2003 (*.xls)

  Francesco

3/9/2008 10:51:14

Ciao a tutti,
ho un problema: come faccio a inserire il valore all'interno di una cella del file excel già esistente (e senza riscriverlo) con il php?

  giuseppe

13/10/2008 12:40:43

ho utilizzato la classe ExcelReader, includendo il file reader.php. Quando cerco di leggere file xls di grandi dimensioni mi dà un errore con problemi di buffer.
Come posso risolvere questo problema ? Grazie

  Lorenzo

20/10/2008 13:45:59

Ho provato a usare questo script ma ricevo questo errore:
Parse error: syntax error, unexpected T_STRING in D:\Inetpub\webs\casiniboysit\Excel\reader.php on line 34


  Fabio

27/11/2008 15:23:45

grande classe ! complimenti!

  Leonardo

10/12/2008 17:14:29

Ciao a tutti,
Ho un problema, lo script funziona perfettamente ma mi fa solo vedere i dati a video. Come faccio a fare in modo che questi dati vengano inseriti in un database mysql con un nomale insert se nn ho i nomi dei vari campi?
Qualcuno può aiutarmi?
Grazie

  Madsex

21/4/2009 0:37:34

Salve raga, è da un po' che smanetto conquesto script ma proprio non mi funziona.
Quando faggio una proca con la pagina php mi esce questo errore:Fatal error: Cannot instantiate non-existent class: spreadsheet_excel_reader in ................... on line 66.

Alla linea 66 c'è in pratica parte dello script: $data = new Spreadsheet_Excel_Reader();

Eccetto l'errore da voi riportato non ho modificato nulla se non il nome del file da far leggere.
Spero seguiate ancora la discussione
Grazie anticipatamente.

  Fabio

21/4/2009 9:17:05

@Madsex:
hai scaricato e incluso la classe ExcelReader?

  Madsex

21/4/2009 14:57:21

Credo di si.Ti riferisci alla cartella phpexcelreader scaricata dal link in alto?Al suo interno ho preso la cartella excel e l'ho messa nel mio sito.

  Fabio

21/4/2009 15:03:23

Leggi il terzo commento, quello di Roberto e controlla che gli include abbiano i percorsi giusti

  Madsex

21/4/2009 15:38:59

Allora ho sotituito come da post.Ho messo require_once 'oleread.inc'; sia nel mio foglio php che in reader.php(come avevo fatto anche ieri) infatti non mi da problemi per questo ma per la riga successiva cioè questa:$data = new Spreadsheet_Excel_Reader();
Quali sono gli include?

  Madsex

21/4/2009 15:41:59

Dimenticavo di dire, per chiarezza, che require_once 'oleread.inc'; nel mio foglio php l'ho dovuto modificare in require_once 'Excel/oleread.inc'; altrimenti mi dava errore.

  Fabio

21/4/2009 15:58:35

Ovunqu siano i tupoi file devi includere nel tuo file php il file reader.php della libreria.

All'interno di questo devi sostituire l'include a OLERead.php con l'include del file oleread.inc.

L'errore che dici tu:
Cannot instantiate non-existent class
è perchè non trova la classe. Hai scritto il nome uguale(maiuscole/minuscole?)

  Madsex

21/4/2009 16:20:29

Le maiuscole e minuscole sono corrette.
Ma forse il problema stà proprio nell'includere il file reader.php.Come faccio?(non mi pare che nello script ci sia per cui per deduzione dovrebbe essere una cosa che devo scrivere io)

  Fabio

21/4/2009 16:40:08

require_once 'Excel/reader.php';
$data = new Spreadsheet_Excel_Reader();

La classe Spreadsheet_Excel_Reader è presente nel file reader.php

Cmq l'ho testato ora x vedere se c'eran cambiamenti e funziona.

  Madsex

21/4/2009 18:35:10

Si è presente ho anche modificato le maiuscole in minuscole ma non cambia nulla da sempre lo stesso errore.Dice che la classe non esiste in pratica. ti posto la porzione di codice del file reader.
class Spreadsheet_Excel_reader
{
/**
* Array of worksheets found
*
* @var array
* @access public
*/
var $boundsheets = array();

/**
* Array of format records found
*
* @var array
* @access public
*/
var $formatRecords = array();


  Madsex

21/4/2009 18:55:43

Olè, adesso sembra andare mi mancava questa stringa : require_once 'Excel/reader.php'; che tu hai sapientemente riportato.
Adesso pongo un altra domanda, se non voglio la tabella basta che tolgo table?

  Madsex

21/4/2009 20:14:32

Ok ho risolto, funziona bene.
Anche se non ho capito come fare per fargli leggere solo una parte del contenuto del file e come fare per visualizzare i caratteri così come li ho inseriti nel file excel, per esempio il grassetto, semplice semplice ma non me lo visualizza.
Come mai?

  Madsex

23/4/2009 19:31:42

Raga nessuno sa come risolvere questo arcano quesito?
Come faccio a far leggere il testo così come è scritto?

  Mimmo

3/6/2009 18:31:52

http://www.legadellapanchina.it/ldp_09/php/mimmo1.php

salve sto lavorando su questo codice ma non riesco a fare 2 cose... nella personalizzazione,
eliminare la lettura delle celle con A B C D e 1 2 3 4 5 dal foglio excel

e inoltre vorrei cercare di formattare le colonne tutte della stessa larghezza...

help me!!!

  Fabio

4/6/2009 11:27:05

@Mimmo:
prova invece che fare il cliclo da $i=1 e $j=1 a farli a partire dal 2. Per fare le colonne uguali bnasta che quandio stampi il td gli dai larghezza fissa:
echo "<td width='50'>".$data->sheets[0]['cells'][$i][$j]."</td>";

  chiara

4/6/2009 21:23:29

ciao scusate mi potete dare una mano a capire come si inseriscono i dati all-interno delle tabelle??
Grazie

  chiara

4/6/2009 21:25:15

scusate nn ho specificato i dati stanno dentro un file excel e io li devo caricare tabelle. :)

  Marco

11/6/2009 16:26:48

davvero gran bella classe... facile ed intuitiva... cmplimenti!!!

  B31

5/10/2009 16:05:33

Ciao,

la classe è ottima, finora son riuscito a fare tutto quello che mi serviva, l'unica cosa che non riesco a fare è leggere il nome dei fogli.

Ho provato qualcosa del tipo:

foreach($data->sheets as $key => $param){
foreach($data->sheets[$key] as $name => $param){
echo $name."<br/>";
}
}

con il seguente risultato:

maxrow
maxcol
numRows
numCols
cells
cellsInfo

Qualcuno sa aiutarmi?

Grazie in anticipo

  pippo

13/10/2009 23:34:30

Ho un problema con le stringhe lunghe: se in una cella si superano i 208 caratteri php li tronca comunque a 208. Avete mica trovato la soluzione??

Grazie anticipatamente

  matteo

25/10/2009 0:07:31

Buongiorno a tutti, è possible far leggere una sola riga anzichè tutto il file xls e magari solo la riga che contine un determinato nome?
grazie a tutti

  dario

16/1/2010 20:27:58

ciao a tutti ho provato questo script ma mi da errore
Fatal error: Call to a member function read() on a non-object in C:\xampp\htdocs\fanta\templates\vam_jblue\leggi_excel.php on line 3... ho incluso il file reader.php... qualcuna sa il come mai??
grazie

  Karanka

21/1/2010 17:53:58

Innanzitutto grazie per la classe.

Come posso formattare (formato, colore, sfondo, ect) i dati importati da excel nella tabella???

tnk

  salvatore

1/2/2010 22:44:47

Per Caludio
"The filename .... is not readable...
esiste qualche soluzione ?"

Si, il problema dipende dal fatto che i nomi dei campi nel file excel (la prima riga per intenderci) non sono uguali ai nomi dei campi nella tabella. Per Esempio: Nome Cognome (in excel) Nome_Cognome nella tabella. Devi sistemare la prima riga del file Excel con i nomi dei capi della Tabella.



  Ninja

13/3/2010 13:30:00

mi da problemi nella formattazione delle date...le converte male....come posso risolvere?

  andrea

12/5/2010 14:55:32

scusate ma invece di postare tutti sti commenti e modifiche ad errori (uno per capirci qualcosa deve leggere per mezz'ora), non era più facile ripubblicare i files corretti?

  Alessio

29/5/2010 16:15:57

Salve, complimenti per lo script, solo che c'è un bug (credo) nella lettura di stringhe da excel che contengono l'apice singolo...
o sbaglio io? come posso risolvere?

  domenico

4/10/2010 18:38:24

dice Salvatore per errore "The filename .... is not readable...
Si, il problema dipende dal fatto che i nomi dei campi nel file excel (la prima riga per intenderci) non sono uguali ai nomi dei campi nella tabella. Per Esempio: Nome Cognome (in excel) Nome_Cognome nella tabella. Devi sistemare la prima riga del file Excel con i nomi dei capi della Tabella!!! dove si trovano i nomi della tabella??

  Pietro

5/10/2010 23:54:06

A me dava un problema con le date: tornava date sballate di un giorno. Ho risolto cambiando nel file reader.php alla riga 71
define('SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS' , 25569);
con
define('SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS' , 25570);
Cioè incrementando il valore di 1
Ciao

  domenico

6/10/2010 9:17:17

non riesco a superare l'errore "the filename .... is not redable" il file excel è corretto e 2003 qualcuno per gentilezza mi può dare qualche indicazione?

  luca

2/11/2010 16:50:14

Ciao a tutti, ho provato ad utilizzare la classe ma visualizza questo errore:

Deprecated: Assigning the return value of new by reference is deprecated reader.php on line 261

come posso risolverlo?

Grazie mille anticipatamente

  luigi riva

24/11/2010 11:08:45

Ciao a tutti. A me funziona. Piccolo particolare: se il numero di caratteri del testo della cella è superiore a 6 mi importa tutto il contenuto della cella fino al penultimo carattere compreso (quindi ne lascia indietro uno, se invece i caratteri sono meno di 7 importa tutto. Qualche idea?
Grazie mille

  luciano crimi

14/5/2011 19:40:05

A me non va ne in locale ne su altervista. Qualcuno potrebbe inviarmi il tutto e funzionante?
lucianocrimi@email.it

  peersaab

29/10/2011 19:07:08

remove the "&" operator from that 261 line

  Mattia

31/10/2011 17:00:18

Salve a tutti e complimenti per l'articoli.
La classe mi da questo errore:

Deprecated: Assigning the return value of new by reference is deprecated in C:\Program Files\EasyPHP-5.3.6.0\www\excel\Excel\reader.php on line 261
The filename example.xls is not readable

ma il file example.xls non esiste e lo script da dove va a recuperare quel nome? mi potete dire dove devo modificare per fargli prendere il file che mi serve?

Grazie a tutti ^^

  Mattia

31/10/2011 17:11:51

EDIT:

ho sistemato il fatto del nome, ma mi da sempre lo stesso essrore dicendomi che il file non è leggibile.

Help pls ^^

  PAOLO

2/2/2012 14:35:02

Anche io ero afflitto dal problema dei time out, ma ho risolto rifacendo il file .XLS perchè quello che ho scaricato era corrotto!
Quindi se avete questo problema potrebbe essere il file che non funge! SALUTI! e INFINITE GRAZIE!

  Simone

13/3/2012 13:41:03

Lo script è ottimo e mi ha risolto la vita. Ho una domanda: se il file excel viene aggiornato mentre un utente si collega alla pagina PHP che lo legge, lo script si blocca e non si riaggiorna più (c'è un refresh automatico sulla pagina), come posso risolvere il problema? Ho cercato in giro ma niente che mi soddisfi.
Grazie

  Diana

14/5/2012 10:29:38

Ciao a tuttti.
Ho usato anch'io questa classe per leggere dei Excel. Il problema è con i file protetti. Come posso fare? se tolgo la protezione legge, ma mi serve la protezione per tutti gli altri utenti. Grazie

  Matt

16/5/2012 16:23:08

La libreria funziona alla grande. Ma se io volessi eliminare dei duplicati come posso fare?

  Alessandra

25/5/2012 17:36:39

Ciao ho provato lo script,
ma ho il seguente errore:
Warning: require_once(Excel/reader.php) [function.require-once]: failed to open stream: Permission denied in /Applications/XAMPP/xamppfiles/htdocs/vimer/leggi_excel.php on line 2

Fatal error: require_once() [function.require]: Failed opening required 'Excel/reader.php' (include_path='.:/Applications/xampp/xamppfiles/lib/php') in /Applications/XAMPP/xamppfiles/htdocs/vimer/leggi_excel.php on line 2

Come posso fare?

  Alagaesia

9/7/2012 12:15:01

Grazie mille! Ottima classe e ottima guida! Per i nabboni che chiedono come formattare celle e table in html andate su html.it e guardate! Se si hanno un minimo di conoscenze di html e php è fantastica! grazie :D

  Cristian

20/11/2012 18:41:48

Salve, la libreria funziona però mi tronca tutte le colonne senza un senso.

  Davide

30/11/2012 1:08:41

Funziona anche con fogli di calcolo openoffice???

  antonio

10/12/2012 15:58:22

Ciao A tutti ..... Grazie per la classe è semplicemente fantastica e in generale ho risolto tutti i problemi facilmente tranne 1
....Notice: iconv(): Detected an illegal character in input string in /opt/lampp/htdocs/script/Excel/reader.php on line 1056

se qualcuno segue ancora e ha idea mi da una mano ?? , il notice viene ripetuto 13 volte, ma non so a quale carattere si riferisce, chiaramente dipende dal mio file ma non so che fare , per il resto tutto il file viene riportato . Idee ?

  Andrea

27/6/2014 9:15:52

Se capita di riscontrare l'errore "require_once 'Spreadsheet/Excel/Reader/OLERead.php';"

si può risolvere cambiando, in Excel/reader.php il require:

da
require_once 'Spreadsheet/Excel/Reader/OLERead.php';
a
require_once 'oleread.inc';

Vedo che in molti, e da molto tempo, hanno questo problema. Perché non viene corretto l'errore?



Lascia un commento


Codice di controllo*:
Nome*:
Email/Link:
Testo*:
 
I campi contrassegnati con * sono obbligatori.