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!

giovedì 28 gennaio 2010

Toools

Sul sito delle extensions di OOo ho caricato Toools, un'extension in fase di sviluppo, attualmente allo stato beta o qualcosa di più.

Ma cosa fa?

Adesso:
  1. crea un grafico Gantt di sviluppo di un progetto con varie attività, con dati salvati su database. I calcoli dei tempi di sviluppo delle attività sono fatti saltando il sabato e la domenica (non le festività per ora). Inoltre è possibile inserire solo una data finale di tutte le attività, oppure una data iniziale o centrale: il programma calcolerà i tempi di sviluppo da solo. Il grafico può essere copiato e incollato in un altro documento di OOo.
  2. crea un ddt di consegna di merce, con dati di clienti, fornitori, pagamenti, articoli e altro salvati su database. Il database (integrato) è stato reso sicuro (in particolare per chiusure inaspettate) attraverso il programma, che salva le modifiche ad ogni inserimento di riga (record). I report vengono generati attraverso Sun Report Builder (c) Sun Microsystems, che deve essere installato a parte, e sono modificabili a piacimento entrando nel database.
In futuro:
  1. modelli di documenti "macrotizzati" per automatizzarli (scelta di un cliente o fornitore con prelievo dei dati dal database, assegnazione di un n. di protocollo, salvataggio del documento e automatica creazione di un link nel database, così da aprirlo successivamente via programma);
  2. diretta conseguenza di 1., gestione documentale oltre che dei documenti creati, di quelli in arrivo;
  3. fatturazione dei documenti di consegna creati come da punto 2. precedente;
  4. scambio dei dati del database tra diversi utenti dello stesso programma;
  5. avvisi automatici derivanti dai dati inseriti nel database, via mail;
  6. ...
Ci sono due versioni del programma, entrambe raggiungibili sul sito delle extensions di OOo, quella standard (Toools) che contiene del codice in Python, e quella senza Python (Toools-nPy) per le versioni di OOo che hanno un Python troppo vecchio o non lo supportano (fino a 3.0.x e tutti i MacOS).

Suggerimenti, consigli, critiche sono tutti benvenuti!