martedì 31 agosto 2010

Lavorare con le tabelle di Calc

In questo post vedremo come effettuare via macro le operazioni più comuni sulle tabelle di OOo Calc.
Per cominciare occorre ottenere un documento Calc.
Con il codice seguente viene creato un nuovo documento.


    sUrl = "private:factory/scalc" 
    oDoc = StarDesktop.loadComponentFromURL(sUrl,"_default",0, Array())

E' possibile usare lo stesso codice anche per aprire un documento esistente, è sufficiente utilizzare l'URL del documento da aprire al posto di quello usato nell'esempio.
Se si intende lavorare con il documento corrente invece:

    oCalcDocument = StarDesktop.getCurrentComponent()

Oppure, più semplicemente:

    oCalcDocument = ThisComponent

Va detto che le due istruzioni appena illustrate non sono perfettamente equivalenti ma magari dedicherò a questo argomento un post specifico in futuro.
Tornando all'argomento del post, ecco come ottenere l'insieme delle tabelle di un documento Calc:

    oSheets = oCalcDocument.getSheets()

Come recuperare le singole tabelle:

  • Medante indice:

    oCalcSheet = oSheets.getByIndex(0)
    
    ' forma equivalente abbreviata:
    oCalcSheet = oSheets(0)

Come sempre nell'API di OpenOffice.org, l'indice comincia da 0 e rappresenta la posizione della tabella nel documento, pertanto la tabella con indice 0 sarà quella che appare con la linguetta più a sinistra (Tabella1 nella figura)



  • Mediante il nome:
    oCalcSheet = oSheets.getByName("Tabella2")

    ' anche in questo caso esiste una forma equivalente abbreviata:
    oCalcSheet = oSheets("Tabella2")

Rinominare una tabella

    oSheets("Tabella1").Name = "Nuovo nome"

Spostare una tabella:

Il metodo richiede 2 parametri: il nome della tabella da spostare (che deve esistere) e la posizione di destinazione.

    'spostiamola dopo la terza tabella (all'ultima posizione)
    oSheets.moveByName( "Tabella1", 3) 

Aggiungere una tabella:

Il metodo insertNewByName provvede a creare una nuova tabella e inserirla nella posizione specificata. Il metodo prende 2 argomenti: il nome della tabella da creare e la posizione di inserimento.


    oSheets.insertNewByName("Nuova Tabella",3)

Eliminare una tabella:

Questo metodo richiede un solo parametro: il nome della tabella da eliminare.


    oSheets.removeByName("Nuova Tabella") 

Proteggere / sproteggere una tabella:

Il seguente codice imposta la protezione con password sulla tabella “Tabella1”
    oSheets("Tabella1").protect("Password") 
 
Per rimuovere la protezione:

     oSheets("Tabella1").unprotect("Password")

Ecco un modo per controllare se una data tabella è protetta
        If oSheets("Tabella1").IsProtected Then 
        Print "la tabella: " & oCalcSheet.Name & " è protetta!"
        End If

Nascondere/mostrare una tabella:

Occorre ricordare che almeno una tabella deve essere sempre visibile, ovvero non è possibile nascondere tutte le tabelle


    ' nasconde la tabella
    oSheets("Tabella1").IsVisible = False

    ' mostra la tabella
    oSheets("Tabella1").IsVisible = True

Contare le tabelle:

    Print oSheets.getCount()

Enumerare le tabelle:

E' importante ricordare che la prima tabella ha l'indice zero

    For I = 0 to oSheets.Count -1 
        oCalcSheet = oSheets.getByIndex(I)
        print oCalcSheet.Name
    Next I

Usando la scorciatoia del ciclo “For Each” invece non occorre conoscere a priori il numero degli elementi da iterare:

    For Each oCalcSheet In oSheets
        Print oCalcSheet.Name
    Next 

Rendere attiva una tabella:

Occorre prima fare conoscenza con un nuovo oggetto utilissimo, il controller.
Il controller è il servizio che all'interno del documento è responsabile per la gestione dell'interazione con l'utente (ad esempio schermo, tastiera, mouse, la selezione corrente, eccetera)

    oView = oCalcDocument.getCurrentController()
    oCalcSheet = oSheets("Tabella2")
    oView.setActiveSheet(oCalcSheet)

E per quanto riguarda le tabelle di Calc direi che abbiamo visto se non proprio tutto almeno parecchio ;)

--
Paolo

Nessun commento: