View Full Version : Leggere file Excel in Php
Come da oggetto. Vorrei leggere dei dati contenuti in un file excel per poi riportarli su di una pagina web. Come fare ? Dove trovare info ? A quanto ho capito forse si può utilizzare OBDC...
Se sono dati semplici li puoi trasformare in CSV con Excel e leggerli
tramite PHP.
Trasformarli in csv sarebbe un problema, in effetti sono molti file e aggiornati abbastanza spesso, salvarli ogni volta anche in CSV non sarebbe l'optimum. Comunque come leggere file CSV allora ?
I CSV li leggi con la funzione file... Ogni riga diventa un elemento di un vettore... Poi ogni elemento del vettore lo espandi con la funzione explode usando come delimiter la virgola...
Ok, pensandoci bene potrei fare un pulsantino "Pubblica sul web" e lo salvo in CSV...
Ma con gli XLS non c'è speranza ?:rolleyes:
E' fattibile con i driver ODBC...ma non tutti gli spazi web permettono l'uso dei driver ODBC...e non tutti gli hosting sono Windows ;)
Originariamente inviato da cionci
E' fattibile con i driver ODBC...ma non tutti gli spazi web permettono l'uso dei driver ODBC...e non tutti gli hosting sono Windows ;)
Non devo publicare il sito, rimarrà in ambiente intranet. Certo mi servirebbe invece sapere quali sono i comandi PHP per aprire la connessione con OBDC. Inoltre immagino che si dovrebbero usare normali comandi sql per poi leggere i dati di un foglio. Mi servirebbe un qualche esempio isomma:rolleyes:
Vari funzioni ede esempi li trovi qui: http://it2.php.net/manual/it/function.odbc-connect.php
Non so se ci sono esempi con Excel, ma anche se non ci sono basta che trovare esempi anche in altri linguaggi, tanto quello che ti interessa sono la stringa di connessione e la struttura delle query...
Esempio di stringa di connessione: http://www.able-consulting.com/MDAC/ADO/Connection/ODBC_DSNLess.htm#ODBCDriverForExcel
Ho provato a definire in Odbc un file xls chiamato "Orario" e ho provato:
$Oconn = odbc_connect("Orario", "Utente1", "Pass1")
ma giustamente mi becco:
Warning: odbc_connect(): SQL error: [Microsoft][Driver Manager ODBC] Nome origine dati non trovato e driver predefinito non specificato., SQL state IM002 in SQLConnect in C:\Programmi\Apache Group\Apache2\htdocs\Index.php on line 3
Come usare quell'impostazione come dal tuo link? (oConn.Open "Driver={Microsoft Excel Driver (*.xls)};" & _
"DriverId=790;" & _
"Dbq=c:\somepath\mySpreadsheet.xls;" & _
"DefaultDir=c:\somepath" )
:cry:
Metti questa stringa:
"Driver={Microsoft Excel Driver (*.xls)};".
"DriverId=790;".
"Dbq=c:\somepath\mySpreadsheet.xls;".
"DefaultDir=c:\somepath"
Al posto di "Orario"... Nome utente e password lasciali vuoti...
Ho provato ad eseguire la connessione che dopo varie bestemmie ha funzionato. Avevo provato a mettere il percorso della root "C:\" e mi dava un parse error, poi casualmente ho provato a cambiare percorso e a quel punto funzionava !! :mad:
Ora sono al punto di eseguire la query, ma mi da errore "non è riuscito a trovare l'oggetto Dati" che sarebbe il mio foglio excel. Il codice è questo:
<? $oConn = odbc_connect("Driver={Microsoft Excel Driver (*.xls)};".
"DriverId=790;".
"Dbq=c:\Cartella\Prova.xls;".
"DefaultDir=c:\Cartella", "", "");
$StrSql = "Select B from Dati Where A = 1";
Print $StrSql;
$Risultato = odbc_exec($oConn, $StrSql);
Echo $Risultato ?>
Dai un'occhiata qui:
http://www.idude.net/excel/articles/using_excel_file_datasources.asp
Ora ti posto il codice funzionante...
function html_print_r($object, $returnValue = false) {
$output = print_r($object, true);
$output = htmlentities($output);
$output = str_replace(" ", " ", $output);
$output = nl2br($output);
if ($returnValue) {
return $output;
} else {
echo $output;
return true;
}
}
$oConn = odbc_connect("Driver={Microsoft Excel Driver (*.xls)};".
"DriverId=790;".
"Dbq=c:\Cartella\Prova.xls;".
"DefaultDir=c:\Cartella", "", "");
echo "<br>Seleziono due colonne e 3 righe<br>";
$StrSql = "Select * from [Dati$"."A1:B4];"; // Ho diviso le stringhe perchè $A1 sembra essere una sequenza di escape
Print $StrSql;
$Risultato = odbc_exec($oConn, $StrSql);
while ($data[] = odbc_fetch_array($Risultato));
odbc_free_result($Risultato);
html_print_r($data);
$data = array();
echo "<br>Seleziono il campo 'Campo1', 'Campo1' deve essere scritto in una colonna della prima riga<br>";
$StrSql = "Select Campo1 from [Dati$];";
Print $StrSql;
$Risultato = odbc_exec($oConn, $StrSql);
while ($data[] = odbc_fetch_array($Risultato));
odbc_free_result($Risultato);
html_print_r($data);
$data = array();
echo "<br>Seleziono un solo elemento<br>";
$StrSql = "Select * from [Dati$"."B3:B4];";
Print $StrSql;
$Risultato = odbc_exec($oConn, $StrSql);
while ($data[] = odbc_fetch_array($Risultato));
odbc_free_result($Risultato);
echo "<br>Ho estratto l'elemento ".$data[0]["F1"]."<br>";
odbc_close($oConn);
?>
GRANDE !! :D
Mi ero accorto che serviva il $ nel nome del foglio, però poi non sapevo come selezionare le colonne e i valori !! Mi sembra di capire che quindi una WHERE non è utilizzabile...:what: ...poi ci provo magari tentanto un Dati$.A$ = 'xxx'....
Credo che si possa fare una where, ma solo quando nella prima riga di ogni colonna c'è il nome del campo...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.