Ciao a tutti,
questo è il mio primo "post tecnico".
Ho avuto bisogno recentemente di leggere dei file *.xls (excel) contenenti record di dati per importarli all'interno di tabelle del database MySql dell'applicazione gestionale che sto sviluppando.
In prima battuta ho provato con OLE, come spiegato qui:
http://wiki.freepascal.org/Office_Automation (al paragrafo [Reading/Writing an Excel file using OLE]).
La cosa ha funzionato ma quando ho tentato di leggere un foglio con oltre 1000 righe la procedura me ne importava solo 254, inoltre per utilizzare questa tecnica è necessario che sulla macchina sia installato MS-Excel.
Siccome non volevo rompermi la testa nel capire perchè dalla 255esima riga in avanti non mi leggesse i dati e anche per svincolarmi da "mamma microsoft" ho deciso di provare FPSpreadsheet.
Di seguito racconto la mia esperienza, magari può essere utile a qualcun altro. Preciso che ho utilizzato il componente solo per leggere file excel e non per modificarli e/o crearli, ma da quanto leggo in giro la libreria si comporta egregiamente anche lì.
- Ho scaricato il componente da Sorceforge
https://sourceforge.net/projects/lazarus-ccr/files/FPSpreadsheet/
(con Svn ho avuto dei problemi, forse il link non è aggiornato)
- L'ho scompattato nella directory \components di Lazarus
- Ho compilato laz_fpspreadsheet.lpk
- Ho installato laz_fpspreadsheet_visual.lpk che ha inserito il componente TsWorksheetGrid nella Tab Additional dei componenti di Lazarus.
- A questo punto ho creato un nuovo form con un pulsante, una openDialog per scegliere il file excel, una label, e una TsWorksheetGrid; poi, nell'evento click del pulsante ho inserito il seguente codice che carica i dati dal file nella griglia e visualizza il numero di righe caricate.
(nota: nel codice seguente il nome della TsWorksheetGrid è gri)
// ****************
// NELLA CLAUSOLA uses DEL FORM INSERIRE:
// fpspreadsheetgrid , fpspreadsheet, fpsallformats
// ****************
procedure Tprincipale.cmdApriExcelClick(Sender: TObject);
var
sFile: string;
begin
sFile:=openDialog1.FileName;
if sFile='' then
begin
showmessage('selezionare il file excel!');
exit;
end;
// *** QUESTA E' LA RIGA CHE CARICA I DATI
gri.LoadFromSpreadsheetFile(sFile);
// **********************************
lblNumRecord.Caption:=intToStr(gri.RowCount)+' righe'; // visualizza num. righe
end;
Spero di non avere scritto inesattezze, nel caso fatemelo sapere.
Un saluto