lunedì 8 febbraio 2010

Nuovo blog

Il nuovo blog (e definitivo spero) è su www.icstools.it
Il motivo del cambiamento è squisitamente tecnico: volevo un blog multilingua e da potermi tenere tutto nel mio sito.
Quindi ho pensato di usare WordPress con il plugin qTranslate: mi sembra che il risultato sia ottimo: il blog è, oltre che in Italiano, in Inglese, Francese e Tedesco (di quest'ultimo non ci capisco un'acca, spero non saltino fuori parolacce dal traduttore automatico ;-) )

domenica 7 febbraio 2010

Importare da vari fogli di calcolo in un database (2)

Fatta la parte 2., passiamo alla 1. (con grande logica :D ): vediamo come leggere in una cartella diversi file.


Intanto dichiariamo la variabile oDoc come pubblica (basta farlo fuori dalle funzioni o sub):

Dim oDoc As Object

Quindi "camminiamo" per la cartella scelta attraverso la funzione OpenDirectory, che verrà spiegata alla fine, con la Sub walkFiles

Sub walkFiles
sDir = OpenDirectory("Seleziona la directory dei file da importare")
'
oSfA è un oggetto che permette l'accesso ai file e alla directory, con varie 'funzioni utili
oSfA = createUnoService("com.sun.star.ucb.SimpleFileAccess")
    If oSfa.exists(sDir) Then

'nella variabil oFoldCont è salvato l'array, o matrice di variabili, creato con 'getFolderContents, e contiene i nomi dei file all'interno della cartella
        oFoldCont = oSfa.getFolderContents(sDir, True)
    Endif

'Definiamo la proprietà per aprire i file in modo nascosto (per evitare un albero 'di Natale)
dim mArgs(0) As New com.sun.star.beans.PropertyValue
mArgs(0).Name = "Hidden"
mArgs(0).Value = True

For i=0 to UBound(oFoldCont)
'Apriamo il file numero i
    oDoc = StarDesktop.loadComponentFromURL(oFoldCont(i), "_blank", 0, mArgs())
'eseguiamo la ricerca delle variabili
    getVariables

'Infini chiudiamo il file
    oDoc.close(True)
Next   

End sub
'Questa funzione l'abbiamo già vista nel post (1)
Sub getVariables
Dim mNomi(2)
Dim mVar(2)
oSheet = oDoc.Sheets.getByIndex(0)
mNomi() = array("COGNOME","NOME","ETA'")
mVar() = array(sCognome,sNome,sVar)
For j=0 to UBound(mNomi)
For i=0 To 50
    oCell = oSheet.getCellByPosition(0,i)
    If oCell.string = mNomi(j) Then
        mVar(j) = oSheet.getCellByPosition(1,i).String
        Exit For
    Endif
Next
Next
print mVar(0) & "," & mVar(1) & "," & mVar(2)
End Sub

'Questa funzione apre la maschera di OOo per selezionare una directory
'***Open and choose a folder*************************************
Function OpenDirectory(Optional sDialogTitle As String)

    oFolderPicker = createUnoService ("com.sun.star.ui.dialogs.FolderPicker")
    oFolderPicker.DialogTitle = sDialogTitle
    If oFolderPicker.execute() Then
        sDir = oFolderPicker.Directory
    Else
        OpenDirectory = 0
    Endif
OpenDirectory = sDir

End Function


Per il momento dovremmo essere a posto... e vedere tot messaggi secondo quanti file abbiamo caricato nella cartella di test.

A presto!

sabato 6 febbraio 2010

Contributo da ripartire

Ho caricato un modello per ripartire un contributo tra più scolari, in base alla fascia di reddito ed alla scuola di appartenenza nel sito dei templates di OOo, raggiungibile direttamente da qui.

Alla prossima!

venerdì 5 febbraio 2010

Importare da vari fogli di calcolo in un database (1)

Sulla mailing list utenti@it.openoffice.org è stato richiesto un metodo per importare, da una serie di file di calc, dei dati all'interno di un database.

La cosa non è fattibile con gli strumenti standard, in quanto le colonne sono in orizzontale, alcune sono spostate, e i file sono tanti.

Però è possibile con il basic. Il progetto è questo:
  1. aprire il primo file,
  2. prelevare i dati all'interno del file,
  3. scrivere i dati prelevati in un record del dabase,
e ripetere il tutto fino alla fine dei file.

Intanto vediamo come prelevare i dati nel file (punto 2.) e tenerli salvati provvisoriamente:

Sub getVariables
'dichiariamo le variabili array che conterranno i nomi dei campi ed il loro valore
Dim mNomi(2)
Dim mVar(2)
oDoc = ThisComponent
oSheet = oDoc.Sheets.getByName("Tabella1")
mNomi() = array("COGNOME","NOME","ETA'")
mVar() = array(sCognome,sNome,sVar)
'iteriamo tutti i campi presenti
For j=0 to UBound(mNomi)
'iteriamo le celle del foglio elettronico (il valore max dipende da quanto possono 'essere dispersi i campi)
For i=0 To 50
    oCell = oSheet.getCellByPosition(0,i)
    If oCell.string = mNomi(j) Then
        mVar(j) = oSheet.getCellByPosition(1,i).String
        Exit For
    Endif
Next
Next
'vediamo il risultato
print mVar(0) & "," & mVar(1) & "," & mVar(2)
End Sub


Il foglio di calc è del tipo:


Alla prossima!