Newsgroup: it.comp.www.php
Titolo: da mysql a excel

Ciao,
ho bisogno di estrapolare dei dati da un db mysql (nomi e indirizzi) ed
esportarli in un file Excel.
Ho trovato molti esempi e la procedura è semplice (es. qui: 
http://tinyurl.com/4lhhyae
), però io ho bisogno di creare più fogli di
lavoro e assegnare loro dei nomi precisi, in quanto il file dovrà
essere dato in pasto ad un'altra applicazione che pretende queste 
specifiche... e non riesco a trovare informazioni utili al riguardo.
Mi sapete aiutare?
m.
-- 
"La legge, in Italia, è come l'onore delle puttane"
(Curzio Malaparte)

 aiutare?
ma tutto questo cosa c'entra col PHP ?

Il 02/03/11 15.36, RedWiz ha scritto:

Beh, è vero che forse riguarda di più le specifiche dei documenti Excel, 
ma visto che l'intento è quello di realizzare uno script PHP per 
esportare immagino che qualcuno si sia già scontrato con problematiche 
simili.
In caso contrario chiedo scusa e mi inginocchio dietro la lavagna a muro. :)



Ci sono varie librerie per creare file excel più o meno strutturati, 
alcune sono ottenibili via PEAR.
Ho usato librerie free per questo scopo per anni nell'assicurativo.
M

 Mi sapete aiutare?
Se vuoi andare con le table devi cercare nella documentazione di Excel.
In alternativa puoi cercare una libreria già pronta che possa scrivere 
il formato nativo di Excel, dato che non basta l'estensione per 
determinare il formato di un file. In questo caso puoi creare il 
documento come vuoi.

Ma perchè complicarsi la vita con il formato excel, e non crei il file
in un normalissimo e universale CSV o TSV (campi separati da
tabulazione), che excel apre e interpreta correttamente?


Perché se gli servono i fogli di excel (più d'uno per documento) non può 
specificarlo
Perché se serve formattazione non può specificarla
Perché se servono formule non può specificarle
Uno di quelli che avevo fatto io a suo tempo era una riga d'intestazione 
nero bold su giallo, prima riga bloccata nello scroll verticale, un 
foglio per mese (da meseCorrente a 1)
Serviva per preparare i carichi di posta massiva che poi formattavo per 
spedirli tramite poste italiane
Le segretarie degli uffici lo trovavano comodo, io pure :)
M

 tabulazione), che excel apre e interpreta correttamente?
Perchč l'OP ha scritto che "il file dovrŕ essere dato in pasto ad
un'altra applicazione che pretende queste specifiche".
Certo che per scegliere Excel come formato di interscambio dati bisogna
essere storditi forte...

 esportarli in un file Excel.
La butto là... ti crei un template excel, lo salvi in xml. Dentro ci 
sono tutte le informazioni per creare header, fogli e celle, hai anche 
gli style.
Partendo da quello, in PHP devi estrapolare i dati e sistemarli dove ti 
servono nell'xml, xml che sputerai fuori dal php.
L'ho fatto svariate volte in c#, ma alla fine si tratta di creare una 
stringa xml valido e contenente i dati che ti servono.
non mi ricordo se salvavo il file come .xls o come xml. in ogni caso 
penso vada bene anche il csv, dipende dalle tue specifiche e da come 
devi mandare il file alle altre applicazioni.
ciao.

 essere storditi forte...
Infatti...
comunque, come nell'esempio di Motosauro, questo essenzialmente mi serve
per generare un file XLS di nominativi e indirizzi da dare in pasto a un 
software di gestione della corrispondenza online.
Quindi la mia unica necessità è creare dei fogli che rispettino i 
requisiti formali dell'applicativo, senza perdermi in finezze di sorta :)
Per ora ho trovato Phpexcel (
http://phpexcel.codeplex.com/
) e lo sto 
testando. Funziona, ma è fin troppo sovradimensionato per le mie misere 
esigenze...


 servono nell'xml, xml che sputerai fuori dal php.
E' quello che faccio io in PHP e Java. Comodissimo. Ma non mi sembra che
si possano aggiungere più fogli nello stesso file excel.

 si possano aggiungere più fogli nello stesso file excel.
[1] mostra esplicitamente il foglio di lavoro "Sheet1"
[1] 
<
http://www.ibm.com/developerworks/opensource/library/os-phpexcel/index.h
tml>

> [1] mostra esplicitamente il foglio di lavoro "Sheet1"
forse perrché non ci sono dati nel foglio 2 e excel si fa il 
ragionamento che non vale la pena creare altri nodi Worksheet.
Prova a creare piu nodi Worksheet:
<Worksheet ss:Name="Sheet1">
chiaramente con diversi nomi ;)
ciao

 chiaramente con diversi nomi ;)
È quello che intendevo suggerire col mio messaggio.

 Mi sapete aiutare?
http://pear.php.net/package/Spreadsheet_Excel_Writer/docs
In particolare per aggiungere nuovi fogli di lavoro
http://pear.php.net/manual/en/package.fileformats.spreadsheet-excel-writer.spreadsheet-excel-writer-workbook.addworksheet.php
L'esempio che ti fanno loro nella prima pagina ti fa già capire la 
facilità d'uso della classe:
Typical usage
<?php
require_once 'Spreadsheet/Excel/Writer.php';
// Creating a workbook
$workbook = new Spreadsheet_Excel_Writer();
// sending HTTP headers
$workbook->send('test.xls');
// Creating a worksheet
$worksheet =& $workbook->addWorksheet('My first worksheet');
// The actual data
$worksheet->write(0, 0, 'Name');
$worksheet->write(0, 1, 'Age');
$worksheet->write(1, 0, 'John Smith');
$worksheet->write(1, 1, 30);
$worksheet->write(2, 0, 'Johann Schmidt');
$worksheet->write(2, 1, 31);
$worksheet->write(3, 0, 'Juan Herrera');
$worksheet->write(3, 1, 32);
// Let's send the file
$workbook->close();
?>
ciao
Mauro

 facilità d'uso della classe:
Tombola, pensavo proprio a qualcosa del genere.


Nel frattempo ho testato Phpexcel (
http://phpexcel.codeplex.com/
) e 
sembra funzionare.
Sono 20 mb di codice; è addirittura eccessivo per le mie necessità visto
che ho la semplice esigenza di salvare un file non formattato.
Comunque funziona... a metà, nel senso che il file generato viene 
correttamente aperto da Excel e Openoffice, ma la mia applicazione si
rifiuta di importarlo perché il formato non sarebbe corretto (a questo
punto direi che è un limite suo).
Risultato: apro il file in Excel, lo risalvo e lo importo... che rottura
di maroni :-(
