PDA

View Full Version : leggere excel con php


Braseolo
05-05-2005, 11:05
qualcuno è a conoscenza di qualche funzione in php per leggere dati da un foglio excel?
io ne ho trovate un paio... ma girano solo su win.

in pratica devo 'semplicemente' leggere dati da un foglio excel e poi usarli in un portale in php... nessuna idea brillante su come fare?

RaouL_BennetH
05-05-2005, 11:14
qualcuno è a conoscenza di qualche funzione in php per leggere dati da un foglio excel?
io ne ho trovate un paio... ma girano solo su win.

in pratica devo 'semplicemente' leggere dati da un foglio excel e poi usarli in un portale in php... nessuna idea brillante su come fare?

Da premettere che di php conosco solo i rudimenti ma, tempo fa, ho dovuto adottare una soluzione del genere per un amico. Dato che non riuscivo a farlo in maniera diretta, ho, come dire, aggirato l'ostacolo così:

Esportavo semplicemente i dati del foglio di excel in un file di testo con i delimitatori, dopodichè, con la funzione explode() di php mi leggevo tutti i campi.

Braseolo
05-05-2005, 11:26
ci avevo pensato anche io.. mi sono però bloccato in quanto non so come esportare in txt (o altro) il mio foglio di lavoro in ambiente linux.

purtroppo il file .xls da cui devo attingere cambia tutti i giorni, quindi la procedura deve essere completamente automatica...

tu come avevi fatto?

RaouL_BennetH
05-05-2005, 11:41
ci avevo pensato anche io.. mi sono però bloccato in quanto non so come esportare in txt (o altro) il mio foglio di lavoro in ambiente linux.

purtroppo il file .xls da cui devo attingere cambia tutti i giorni, quindi la procedura deve essere completamente automatica...

tu come avevi fatto?

Quindi, se non ho capito male, non sei tu che gestisci il foglio di lavoro, dato che per esportare i dati in formato testo delimitato, c'è una comoda funzione nel menu file di excel, "esporta". Per quanto riguarda quello che feci io, se hai pazienza potrei postartelo verso sera, non ho il cd con lo script a portata di mano e sinceramente non ricordo bene.

Ho comunque trovato quest'esempio su google:


<?php

// The example of print out the result
$result = array();
searchEXL("C:/test.xls", "test", $result);

foreach($result as $sheet => $rs){
echo "Found at $sheet";

echo "<table width=\"100%\" border=\"1\"><tr>";

for($i = 0; $i < count($rs["FIELD"]); $i++)
echo "<th>" . $rs["FIELD"][$i] . "</th>";

echo "</tr>";

for($i = 0; $i < count($rs["TEXT"]); $i++) {
echo "<tr>";

for($j = 0; $j < count($rs["FIELD"]); $j++)
echo "<td>" . $rs["ROW"][$i][$j] . "</td>";

echo "</tr>";
}
echo "</table>";

}

/**
* @param $file string The excel file path
* @param $keyword string The keyword
* @param $result array The search result
*/

function searchEXL($file, $keyword, &$result) {
$exlObj = new COM("Excel.Application") or Die ("Did not connect");
$exlObj->Workbooks->Open($file);
$exlBook = $exlObj->ActiveWorkBook;
$exlSheets = $exlBook->Sheets;

for($i = 1; $i <= $exlSheets->Count; $i++) {
$exlSheet = $exlBook->WorkSheets($i);

$sheetName = $exlSheet->Name;

if($exlRange = $exlSheet->Cells->Find($keyword)) {
$col = 1;
while($fields = $exlSheet->Cells(1, $col)) {
if($fields->Text == "")
break;

$result[$sheetName]["FIELD"][] = $fields->Text;
$col++;
}

$firstAddress = $exlRange->Address;
$finding = 1;
$result[$sheetName]["TEXT"][] = $exlRange->Text;

for($j = 1; $j <= count($result[$sheetName]["FIELD"]); $j++) {
$cell = $exlSheet->Cells($exlRange->Row ,$j);
$result[$sheetName]["ROW"][$finding - 1][$j - 1] = $cell->Text;
}

while($exlRange = $exlRange->Cells->Find($keyword)) {
if($exlRange->Address == $firstAddress)
break;

$finding++;
$result[$sheetName]["TEXT"][] = $exlRange->Text;

for($j = 1; $j <= count($result[$sheetName]["FIELD"]); $j++) {
$cell = $exlSheet->Cells($exlRange->Row ,$j);
$result[$sheetName]["ROW"][$finding - 1][$j - 1] = $cell->Text;
}

}

}

}

$exlBook->Close(false);
unset($exlSheets);
$exlObj->Workbooks->Close();
unset($exlBook);
$exlObj->Quit;
unset($exlObj);
}
?>


Ovviamente devi sostituire il nome Test con il nome del tuo file.

cionci
05-05-2005, 12:07
L'unica, se vuoi che funzioni su ogni SO, è esportare in CSV da Excel...

RaouL_BennetH
05-05-2005, 12:09
L'unica, se vuoi che funzioni su ogni SO, è esportare in CSV da Excel...

Ah, quindi anche quando io feci sta cosa qualche tempo fa, pensavo di essere ricorso ad un "trucco dozzinale" date le mie scarsissime conoscenze di php. Invece, se ho capito bene il "Comma Sparated Value" è l'unica strada? O meglio, è la strada migliore?

cionci
05-05-2005, 12:13
O meglio, è la strada migliore?
Se vuoi che funzioni su un hosting linux è, ioc redo, l'unica soluzione...
Inoltre molti hosting Windows non ti permettono di usare le funzioni odbc_* di php che si utilizzano per aprire Excel tramite driver odbc... Aruba ad esempio...
Tempo fa per fare un sito in php che sia appoggiava sia a MySQL che a un file di Access mi è toccato fare la parte che doveva usare il file Access (una specie di elenco con vari dati) con ASP ed infilarla in un iframe...

Vedo sopra che hai postato un esempioc he usa gli oggetti COM...addirittura quello è ancora meno compatibile e funziona solo su hosting Windows...senza contare che la maggior parte degli hosting disattiva questa feature (di nuovo Aruba)...

Braseolo
05-05-2005, 12:29
io per fortuna non ho problemi di hosting, il tutto dovrà poi girare in una intranet e il server ovviamente me lo faccio io... (per forza linux).
Mi rimane però il problema di esportare-convertire il foglio in automatico... sapete per caso se è possibile farlo senza passare da win?