Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Java/Excel modificare file senza sovrascrivere

    Salve.
    Ho un problema, dovrei fare un file xls con molte righe.
    Dato che se provo a caricare tutto in una volta mi si riempie la ram avevo pensato di scrivere a pezzi(ogni 100 righe chiudere e riaprire).
    Il problema è che non sò come riaprire il file senza perdere il vecchio.
    Sto facendo varie prove con un programma di test.
    Inoltre non riesco a stampare su una cella come vorrei
    Vorrei 3 righe del tipo:
    ABCDE
    | ||
    FGHIL

    ma quando scrivo sul file excell le righe sono attaccate e gli spazi non hanno la stessa dimensione di un carattere.
    Vi posto il mio codice di prova
    codice:
    import jxl.*;
    import jxl.write.*;
    import java.io.*;
    import java.util.*;
    import jxl.*;
    
    public class Creaxls {
      public static void main(String arg[])throws Exception
      {
         Label lab;
       CellView cell;   
       WritableWorkbook workbook;
          workbook = null;
      WritableSheet sh;
        workbook = Workbook.createWorkbook(new File("prova.xls"));
        sh = workbook.createSheet("Page 1", workbook.getNumberOfSheets());
        lab = new Label(0, 0, "primo");
       workbook.getSheet("Page 1").addCell(lab);
           workbook.write();
         workbook.close();
          workbook = Workbook.createWorkbook(new File("prova.xls"));
         sh = workbook.createSheet("Page 1", workbook.getNumberOfSheets());
         lab = new Label(0, 1, "ABCD\n | |\nEFGH");
       workbook.getSheet("Page 1").addCell(lab);
       
         workbook.write();
         workbook.close();
       }}

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Credo che l'unico modo sia ottenere un oggetto Workbook a partire dal file appena creato, per poi passarlo come parametro al metodo createWorkbook:

    codice:
    // Ottengo un Workbook in lettura
    Workbook work = Workbook.getWorkbook( new File("prova.xls") );
    
    // Creo il nuovo workbook
    WritableWorkbook writeWork = Workbook.createWorkbook(new File("altroFile.xls"), work);
    
    ...
    
    // Alla fine eliminerò il file originario (prova.xls) poichè avrò il nuovo file (altroFile.xls)
    Non so se si possa usare come nome del file lo stesso del file aperto in lettura... non ho provato.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Grande .
    Funziona anche con lo stesso nome.
    ora sussiste il problema dell'incolonnamento.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Da quello che ho capito stai cercando di scrivere su una cella dei caratteri.

    Immagino che tu sappia che da una trentina d'anni a questa parte hanno inventato i caratteri (font) TrueType, in cui le lettere non hanno tutte la stessa dimensione, ma, ad esempio, una I occupa molto meno spazio di una O. Se vuoi avere del testo perfettamente incolonnato carattere per carattere devi usare un font monospaced (come il Courier New o il Lucida Console).

    Puoi settare il font di una particolare cella usando un codice simile a questo:

    codice:
    // Creo un formato cella per un font Courier a 12 pt
    WritableFont myFont = new WritableFont(WritableFont.COURIER, 12);
    WritableCellFormat myFormat = new WritableCellFormat ( myFont );
    
    // Creo una label, con il formato creato prima
    Label lbl = new Label(colonna, riga, "Testo della cella", myFormat);
    sheet.addCell(label2);
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Originariamente inviato da LeleFT
    Da quello che ho capito stai cercando di scrivere su una cella dei caratteri.

    Immagino che tu sappia che da una trentina d'anni a questa parte hanno inventato i caratteri (font) TrueType, in cui le lettere non hanno tutte la stessa dimensione, ma, ad esempio, una I occupa molto meno spazio di una O. Se vuoi avere del testo perfettamente incolonnato carattere per carattere devi usare un font monospaced (come il Courier New o il Lucida Console).

    Puoi settare il font di una particolare cella usando un codice simile a questo:

    codice:
    // Creo un formato cella per un font Courier a 12 pt
    WritableFont myFont = new WritableFont(WritableFont.COURIER, 12);
    WritableCellFormat myFormat = new WritableCellFormat ( myFont );
    
    // Creo una label, con il formato creato prima
    Label lbl = new Label(colonna, riga, "Testo della cella", myFormat);
    sheet.addCell(label2);
    Ciao.
    Sisi ho risolto usando il courier.
    Grazie mille potete pure chiudere.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da salvo19881
    Sisi ho risolto usando il courier.
    Grazie mille potete pure chiudere.
    Bene.
    PS: in questo forum le discussioni non vengono chiuse se non per motivi di violazione del regolamento.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.