Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    7

    file xls errore compilazione campi

    Salve a tutti, ho un problema con le librerie Apache POI che gestiscono la creazione ed apertura di file .xls in Java. In pratica io creo un file Excel in cui alcune colonne vanno riempite con lo stesso valore, fino all'ultima riga. Ho creato un metodo per fare questo, che seleziona una colonna specifica e la riempie. Il problema sta nel fatto che, facendo varie chiamate al metodo, la colonna riempita risulta essere sempre quella dell'ultima chiamata, mentre le altre rimangono vuote, sebbene durante le chiamate antecedenti vengano riempite con il valore desiderato (ho fatto un check durante il debugging). Non riesco a capire il perché di questo funzionamento.
    Dopo aver eseguito l'ultima chiamata al metodo in questione, ne viene invocato un altro che scrive il file .xls in una cartella sul pc.

    Grazie

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Senza vedere il codice è più facile vincere al superenalotto
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    7
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Senza vedere il codice è più facile vincere al superenalotto
    codice:
    public void fillColFixedValue(String colname, String value){
            
            /**
             * seleziona la colonna desiderata nel csv
             * la riempe con il valore _value impostato
             */
            System.out.println("DEBUG: il foglio è di tipologia: " + this.typeSheet);
            int indice_col = this.searchCol(colname, 4, false); //seleziona la quinta riga nel csv e ricerca
            //all'interno di essa la colonna con il nome _colname
            System.out.println("DEBUG: indice col - " + indice_col);
            this.writeCol(indice_col, value);
            
        }
        
        
        
        public void writeXls(){
            
            String filename="C:/" + this.typeSheet + ".xls" ;
           
            /*HSSFWorkbook workbook=new HSSFWorkbook();
            HSSFSheet sheet =  workbook.createSheet("FirstSheet");  
                    */
            
            try{
                try (FileOutputStream fileOut = new FileOutputStream(filename)) {
                    this.workbookOut.write(fileOut);
                    System.out.println("Your excel file has been generated!");
                    fileOut.close();
                }
            
            } catch (FileNotFoundException e) {
            e.printStackTrace();
            } catch (IOException e) {
            e.printStackTrace();
            }
            
        }

    poi invece il richiamo del metodo è:

    codice:
    DR.fillColFixedValue("!A_NAME", "DR");
    DR.fillColFixedValue("A_IODV", "SIX");

    dove: la prima stringa è la colonna da ricercare, la seconda stringa è il valore con cui riempire la colonna.
    Ultima modifica di LeleFT; 28-01-2014 a 17:19 Motivo: Aggiunti i tag CODE

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    this.writeCol(indice_col, value);

    questo metodo cosa fa? a chi si riferisce this?

    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    7
    Quote Originariamente inviata da valia Visualizza il messaggio
    this.writeCol(indice_col, value);

    questo metodo cosa fa? a chi si riferisce this?

    all'oggetto che esegue il metodo... il metodo scrive nella colonna desiderata, il valore che attribuisco io.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Quote Originariamente inviata da Sara88 Visualizza il messaggio
    all'oggetto che esegue il metodo... il metodo scrive nella colonna desiderata, il valore che attribuisco io.
    Questo è ovvio... credo che la domanda fosse "Che classe è quel 'this' ?", in modo da poter andarne a consultare la documentazione o, se è una tua classe, poterne vedere il codice.


    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

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Questo è ovvio... credo che la domanda fosse "Che classe è quel 'this' ?", in modo da poter andarne a consultare la documentazione o, se è una tua classe, poterne vedere il codice.


    Ciao.
    appunto...mi hai preceduta
    RTFM Read That F*** Manual!!!

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    7
    Quote Originariamente inviata da valia Visualizza il messaggio
    appunto...mi hai preceduta
    codice:
    public class Datasheet {
        private FileInputStream listaCom; //lista di comunicazione, il file viene passato per creare un foglio di calcolo da cui estrarre
        //i campi
        private HSSFWorkbook workbookInput;
        private HSSFSheet foglio;
        private HSSFWorkbook workbookOut;
        private HSSFSheet sheetOut, sheetInput;
        private HSSFRow rowInput;
        private String nomeWork;//nome del foglio di calcolo
        private String typeSheet;
        private int tipo_ldc, ultimo_indice_ldc;
        private ArrayList<HSSFRow> rows;
        private int numRighe;
        
        public static final int indice_WRDIG = 5;
        public static final int indice_RDDIG = 6;
        public static final int indice_WRANALOG = 7;
        public static final int indice_RDANALOG = 8;
        
        public static final String DR = "DR";
        public static final String AR = "AR";
        public static final String AI = "AI";
        public static final String DI = "DI";
        public static final String DA = "DA";
        
        
        /*
        COSTRUTTORE
        ---------------------------------------------------------
        Viene passato il nome della lista di Comunicazione e la tipologia (AR,DR,etc.)
        Viene creato un workbook (out) con un foglio di calcolo della tipologia specificata
        */
        
        public Datasheet(String nomeWork, String sheetType){
            
            /*PARTE 1: IMPOSTA IL TIPO DI FOGLIO*/
            
            this.nomeWork = nomeWork;
            typeSheet = sheetType;
            
            switch(typeSheet){
               case DR:
                    tipo_ldc = indice_WRDIG;
                    break;
               case AR:
                    tipo_ldc = indice_WRANALOG;
                    break;
               case AI:
                    tipo_ldc = indice_RDANALOG;
                    break;
               case DI:
                    tipo_ldc = indice_RDDIG;
                    break;
               case DA:
                    tipo_ldc = indice_RDDIG;
                    break;
            }
            
            /*PARTE 2: APRE IN LETTURA LA LISTA DI COMUNICAZIONE E CREA IL FILE DI OUTPUT*/
            
            /*parte x*/
            
            try{
                
            
            listaCom = new FileInputStream(this.nomeWork);    
            workbookInput = new HSSFWorkbook(listaCom);
            
            
            workbookOut = new HSSFWorkbook();
            
            /*parte x*/
            
            //creo il foglio nel file di output
            sheetOut = workbookOut.createSheet(typeSheet);
            //devo recuperare il foglio appropriato della lista di comunicazione
            sheetInput = workbookInput.getSheetAt(tipo_ldc);
            //mi salvo l'ultima riga presente nel file di input (lista di comunicazione)
            ultimo_indice_ldc = sheetInput.getLastRowNum();
            //System.out.println("La LDC ha: " + ultimo_indice_ldc + " righe ed è di tipo: " + this.typeSheet + " - " + tipo_ldc);
            
            /*parte x*/
            
           
            rows = new ArrayList<HSSFRow>();//inizializzo la lista di righe di intestazione
            listaCom.close();
            }catch(Exception e){
                System.out.println("ECCEZIONE(Costruttore_datasheet):");
                e.printStackTrace();
            }
            
            
            }//costruttore]
    questa è la classe.

    poi un metodo richiamato dentro la classe è:

    codice:
     private void writeCol(int indice, String value){
            
            HSSFRow row_output;
            
            for (int i=1; i<ultimo_indice_ldc; i++){ /**scorre fino all'ultima riga**/
                
                /*SCRITTURA*/
                 
                this.sheetOut.createRow(i+4); /*seleziona la riga corrente*/
                row_output = this.sheetOut.getRow(i+4);
                HSSFCell cellOut = row_output.createCell(indice); //creo la cella nella colonna prima ricercata
                cellOut.setCellValue(value); //scrittura del valore desiderato (_value) passato come argomento
                   //del metodo
                   
                
            }//FINE CICLO FOR
    e un altro:

    codice:
     private int searchCol(String colname, int rownum, boolean isInput){
        
        HSSFRow row_tmp;    
            
        if (isInput){
        row_tmp = this.sheetInput.getRow(rownum); /*prendo la riga di intestazione*/
                /*poi ricerco la colonna desiderata sulla base dell'argomento del metodo (variabile colname_ldc)*/
        }else{
          row_tmp = this.sheetOut.getRow(rownum);
        }   
        
        
            int indice_colonna_int = -1;
        
            System.out.println("DEBUG: la colonna è: " + row_tmp.getRowNum());
            short minColIx = row_tmp.getFirstCellNum();
            short maxColIx = row_tmp.getLastCellNum();
            System.out.println("DEBUG: minColIx: " + minColIx);
            System.out.println("DEBUG: maxColIx: " + maxColIx);
            for( short colIx=minColIx; colIx<maxColIx; colIx++) {
                HSSFCell cell_ldc;
                cell_ldc = row_tmp.getCell((int)colIx);
                
                if(cell_ldc == null) {
                    System.out.println("DEBUG: la cella è null - ");
                continue;
                }else{
                    System.out.println("DEBUG: la cella è diversa da null e contiene - " + cell_ldc.toString());
                if(cell_ldc.toString() == colname){
                    //ho trovato l'indice dalla colonna corrispondente
                   
                   indice_colonna_int = colIx;   
                    System.out.println("DEBUG: ho trovato l'indice della cella che è: " + indice_colonna_int);
                    /*OCCHIO AL RETURN*/
                    return indice_colonna_int;
                }
                }
                
            }
            /**
             * RETURN VALUE: RITORNA -1 SE NON HA TROVATO NULLA, ALTRIMENTI UN VALORE MAGGIORE
             * O UGUALE A 0
             */
            
            return indice_colonna_int;
        
        }//fine metodo
    Ultima modifica di Sara88; 29-01-2014 a 10:24

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    'scolta non mi rimetto a leggere sto casotto non indentato...modifica inserendo i tag code o chiedi ad un moderatore di correggere e poi ne riparliamo
    RTFM Read That F*** Manual!!!

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    7
    scusa ma è la prima volta che scrivo su un forum e non sapevo... ecco messi i tag.

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.