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!

1 commento:

  1. Buongiorno,
    ho due file di calc , file1 e file2 , apro il file1 e tramite una macro seleziono e apro il file2 (senza visualizzarlo) e copio dei valori da insire nel file1, con excel ci sono riuscito ma con calc e basic ho difficoltà .. stavo leggendo questo articolo ma ancora non ci riesco.
    Potete aiutarmi?

    RispondiElimina