PDA

View Full Version : Leggere file Excel in Php


Ldmx
29-03-2005, 14:11
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...

Blackat
29-03-2005, 14:29
Se sono dati semplici li puoi trasformare in CSV con Excel e leggerli
tramite PHP.

Ldmx
29-03-2005, 15:47
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 ?

cionci
29-03-2005, 16:56
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...

Ldmx
29-03-2005, 17:23
Ok, pensandoci bene potrei fare un pulsantino "Pubblica sul web" e lo salvo in CSV...
Ma con gli XLS non c'è speranza ?:rolleyes:

cionci
29-03-2005, 17:35
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 ;)

Ldmx
30-03-2005, 19:40
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:

cionci
30-03-2005, 19:57
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...

cionci
30-03-2005, 20:05
Esempio di stringa di connessione: http://www.able-consulting.com/MDAC/ADO/Connection/ODBC_DSNLess.htm#ODBCDriverForExcel

Ldmx
31-03-2005, 17:24
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:

cionci
31-03-2005, 18:57
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...

Ldmx
05-04-2005, 10:35
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 ?>

cionci
05-04-2005, 15:50
Dai un'occhiata qui:

http://www.idude.net/excel/articles/using_excel_file_datasources.asp

Ora ti posto il codice funzionante...

cionci
05-04-2005, 16:14
function html_print_r($object, $returnValue = false) {
$output = print_r($object, true);
$output = htmlentities($output);
$output = str_replace(" ", "&nbsp;", $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);
?>

Ldmx
06-04-2005, 09:00
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'....

cionci
06-04-2005, 11:55
Credo che si possa fare una where, ma solo quando nella prima riga di ogni colonna c'è il nome del campo...