Impostare gli attributi di righe e-o celle di un fil e ods

di il
9 risposte

Impostare gli attributi di righe e-o celle di un fil e ods

Buongiorno a tutti,

Situazione:
Riempio un DefaultTableModel che poi uso per creare un file .ods con le seguenti istruzioni:

      SpreadSheet.createEmpty(modTable).saveAs(nomeFile);
      SpreadSheet.createFromFile(nomeFile);
Problema:
Come faccio ad impostare gli attributi delle righe o celle del file ods?
Per esempio i testi in Bold oppure la dimensione del font o il colore del testo?

Dalle ricerche sul web non sono riuscito a trovare qualcosa di utile.
Mi sembra strano.
Magari non ho fatto le ricerche giuste. Boh?

9 Risposte

  • Re: Impostare gli attributi di righe e-o celle di un fil e ods

    ZioCrick ha scritto:


    Problema:
    Come faccio ad impostare gli attributi delle righe o celle del file ods?
    Per esempio i testi in Bold oppure la dimensione del font o il colore del testo?
    Ok, distinguiamo tra due cose: un conto è come impostare attributi, font ecc... nel ods e un altro conto è come/dove tenere delle informazioni su questi aspetti nelle tue strutture dati della tua applicazione.

    Per scrivere il .ods quale API/libreria hai usato?
    Hai parlato di DefaultTableModel (Swing), esso è solo un "modello" di dati. Di per sé non "sa" nulla di attributi, font ecc... Quindi in base a cosa decideresti di impostare attributi e quant'altro??
  • Re: Impostare gli attributi di righe e-o celle di un fil e ods

    Allora, i dati provengono da varie tabelle MySql che estraggo tramite dei java.sql.ResultSet.
    Questi dati opportunamente elaborati e formattati li voglio scaricare in un file .ods

    In rete a suo tempo avevo scoperto che per creare un file .ods si usavano:
    
    import javax.swing.table.DefaultTableModel;
    import org.jopendocument.dom.spreadsheet.SpreadSheet;
    
    popolando prima il TableModel e poi scaricandolo nel file .ods con le due istruzioni riportate nel messaggio precedente.
    In effetti dopo ennemila ricerche mi sembrava di aver capito che il TableModel non avesse la possibilità di impostare attributi.
    In pratica gli attributi li vorrei applicare alle righe o ai campi in fase di creazione del file ods, ovvero durante la creazione di una riga vorrei poter impostare quella riga in bold, perché magari è l'inizio di una serie di dati particolari, poi magari tutte le celle di una colonna dovrebbero avere un colore particolare, in funzione di un parametro contenuto nel db, e così via, quindi si tratta di scelte che faccio nel metodo che crea il file ods.

    Visto che i TableModel non sono adatti per questo, chiedevo appunto se ci fosse qualche altro metodo per popolare un file ods, e contemporaneamente impostandone gli atributi, per ogni cella o per ogni riga.
  • Re: Impostare gli attributi di righe e-o celle di un fil e ods

    ZioCrick ha scritto:


    Visto che i TableModel non sono adatti per questo, chiedevo appunto se ci fosse qualche altro metodo per popolare un file ods, e contemporaneamente impostandone gli atributi, per ogni cella o per ogni riga.
    Ho ritrovato per caso questa discussione in cui già nel 2019 indicavi di aver trovato questa jOpenDocument.

    Comunque la questione è che quel createEmpty(TableModel) mi pare molto (troppo) "semplicistico" e sicuramente non adatto per quello che vuoi fare. Io non conosco nei dettagli questa jOpenDocument (è anche un po' "vecchia"), devi vedere se offre una API più diretta e completa per creare lo spreadsheet creando volta per volta righe e colonne potendo impostare stili, attributi ecc... Insomma, questa è la API da usare.

    Se poi vuoi poter riutilizzare questo approccio in più parti della applicazione o in più tue applicazioni, allora basterebbe fare un piccolo "strato" al di sopra di jOpenDocument per rendere questa gestione più facilmente riutilizzabile.
  • Re: Impostare gli attributi di righe e-o celle di un fil e ods

    andbin ha scritto:


    Comunque la questione è che quel createEmpty(TableModel) mi pare molto (troppo) "semplicistico" e sicuramente non adatto per quello che vuoi fare.
    Infatti. E' per questo che aperto questa richiesta di aiuto.

    andbin ha scritto:


    Io non conosco nei dettagli questa jOpenDocument (è anche un po' "vecchia"), devi vedere se offre una API più diretta e completa per creare lo spreadsheet creando volta per volta righe e colonne potendo impostare stili, attributi ecc... Insomma, questa è la API da usare.
    Ho verificato ed è ancora ferma al 2014.
    A questo punto se tu o qualcun altro conoscete qualche alternativa, ringrazio.
  • Re: Impostare gli attributi di righe e-o celle di un fil e ods

    ZioCrick ha scritto:


    Ho verificato ed è ancora ferma al 2014.
    A questo punto se tu o qualcun altro conoscete qualche alternativa, ringrazio.
    Ho dato una occhiata veloce al javadoc della jOpenDocument: sulle righe/colonne/celle ha la gestione degli attributi. Vedo metodi tipo getBackgroundColor, getTextProperties, getFontName ecc... Quindi la gestione degli attributi ce l'ha!

    Pertanto se ti va di continuare con la jOpenDocument (sebbene un po' datata), la questione è solo quella di andare un po' più a fondo nella API, invece che limitarsi a quei metodi "semplicistici" di SpreadSheet.
  • Re: Impostare gli attributi di righe e-o celle di un fil e ods

    andbin ha scritto:


    Ho dato una occhiata veloce al javadoc della jOpenDocument: sulle righe/colonne/celle ha la gestione degli attributi. Vedo metodi tipo getBackgroundColor, getTextProperties, getFontName ecc... Quindi la gestione degli attributi ce l'ha!
    Mannaggia, sono attanagliato da un'altro problema... ma ho cercato comunque di dare un'occhiata al:
    org.jopendocument.dom.spreadsheet.Sheet;
    e non ci trovo i metodi che hai indicato.
    Ho trovato le MutableCell e le Row ma non hanno quelle proprietà.
    Boh?
    Ci devo lavorare con un po' più di calma, ma a prima vista mi sembra un casino.
  • Re: Impostare gli attributi di righe e-o celle di un fil e ods

    Ok, ho fatto qualche prova con questa jOpenDocument. Come unica dipendenza (Maven) ho usato:
    <dependency>
        <groupId>org.jopendocument</groupId>
        <artifactId>jOpenDocument</artifactId>
        <version>1.3</version>
    </dependency>
    L'esempio è il seguente. Provalo, genera un piccolo sheet con nomi di persone fittizie dove (con molta fantasia ) ho colorato di azzurro le righe dei maschi e di rosa le righe delle femmine. Ovviamente è solo un esempio basilare e non molto object-oriented. Si può maneggiare ovviamente meglio in altri modi più appropriati.

    Nota che l'esempio non ha nulla a che fare direttamente con Swing/JTable, se non per il fatto tecnico che MutableTableModel deriva dal AbstractTableModel di Swing (scelta forse non molto felice..).

    Quindi come vedi il colore di background c'è. C'è sicuramente anche supporto per altri aspetti visuali ma non ho indagato oltre per ora ...
    import java.awt.Color;
    import java.io.File;
    import org.jopendocument.dom.spreadsheet.MutableCell;
    import org.jopendocument.dom.spreadsheet.Sheet;
    import org.jopendocument.dom.spreadsheet.SheetTableModel.MutableTableModel;
    import org.jopendocument.dom.spreadsheet.SpreadSheet;
    
    public class ProvaJOpenDocument {
        public static void main(String[] args) throws Exception {
            Persona[] persone = {
                    new Persona("Mario", "Rossi", 1984, Sesso.MASCHIO),
                    new Persona("Lucia", "Verdi", 1954, Sesso.FEMMINA),
                    new Persona("Roberto", "Bianchi", 1966, Sesso.MASCHIO),
                    new Persona("Giacomo", "Neri", 1954, Sesso.MASCHIO),
                    new Persona("Anna", "Marrone", 1975, Sesso.FEMMINA),
                    new Persona("Marco", "Viola", 1961, Sesso.MASCHIO),
            };
    
            SpreadSheet spreadSheet = SpreadSheet.create(1, 1, 1);
    
            Sheet sheet = spreadSheet.getFirstSheet();
            sheet.setName("Persone");
            sheet.ensureRowCount(persone.length);
            sheet.ensureColumnCount(4);
    
            MutableTableModel<SpreadSheet> tm = sheet.getMutableTableModel(0, 0);
    
            for (int r = 0; r < persone.length; r++) {
                Persona persona = persone[r];
                Color background = persona.getSesso() == Sesso.MASCHIO
                        ? new Color(135, 206, 250) : new Color(255, 192, 203);
    
                setCella(tm.getCellAt(r, 0), persona.getNome(), background);
                setCella(tm.getCellAt(r, 1), persona.getCognome(), background);
                setCella(tm.getCellAt(r, 2), persona.getAnnoNascita(), background);
                setCella(tm.getCellAt(r, 3), persona.getSesso(), background);
            }
    
            spreadSheet.saveAs(new File("C:\\blabla\\persone.ods"));
        }
    
        private static void setCella(MutableCell<SpreadSheet> cell, Object valore, Color background) {
            cell.setValue(valore);
            cell.setBackgroundColor(background);
        }
    }
    
    
    class Persona {
        private String nome;
        private String cognome;
        private int annoNascita;
        private Sesso sesso;
    
        public Persona(String nome, String cognome, int annoNascita, Sesso sesso) {
            this.nome = nome;
            this.cognome = cognome;
            this.annoNascita = annoNascita;
            this.sesso = sesso;
        }
    
        // metodi setter e/o getter (omessi per brevità!) ....
    }
    
    enum Sesso {
        MASCHIO, FEMMINA
    }
  • Re: Impostare gli attributi di righe e-o celle di un fil e ods

    andbin ha scritto:


    L'esempio è il seguente. Provalo, genera un piccolo sheet con nomi di persone fittizie dove (con molta fantasia ) ho colorato di azzurro le righe dei maschi e di rosa le righe delle femmine. Ovviamente è solo un esempio basilare e non molto object-oriented. Si può maneggiare ovviamente meglio in altri modi più appropriati.

    Nota che l'esempio non ha nulla a che fare direttamente con Swing/JTable, se non per il fatto tecnico che MutableTableModel deriva dal AbstractTableModel di Swing (scelta forse non molto felice..).

    Quindi come vedi il colore di background c'è. C'è sicuramente anche supporto per altri aspetti visuali ma non ho indagato oltre per ora
    Mannaggia, mi ero perso quest'ultimo post.
    Ho fatto un po di prove e ricerche, ma a parte il setBackgroundColor non trovo altri metodi per impostare ad esempio, la dimensione del font, il colore del font, il bold, l'italico o il tipo di font, l'allineamento del testo, ovvero tutte le caratteristiche che normalmente si possono impostare ad un testo di una cella.
  • Re: Impostare gli attributi di righe e-o celle di un fil e ods

    Ciao,
    io ho ancora lo stesso problema.
    Qualcuno per caso avrebbe qualche indicazione ulteriore?
Devi accedere o registrarti per scrivere nel forum
9 risposte