Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63

    Ottenere i valori delle celle di xls o csv

    Sto facendo un sito, e l'utente deve poter selezionare un file .xls o .csv (tramite una form) e dopo aver premuto sul pulsante "invio" il file da lui selezionato deve essere visualizzato in una jtable.

    La domada è, dato questo file xls o csv (che contiene solo stringhe), come posso ottenere una struttura dati per andare a creare la jtable?

    Ho visto che la creazione della jtable avviene
    Codice PHP:
    JTable table = new JTable(rowDatacolumnNames); 
    io vorrei poter fare una cosa simile, con rowData [][] che mi rappresenti la struttura del documento, e columnNames[] mi rappresenti solo la prima riga.

    in modo da poter fare
    Codice PHP:
    JTable table = new JTable(rowDatacolumnNames); 

  2. #2
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    non ho capito molto di ciò che chiedi..forse questo?

    http://download.oracle.com/javase/1....va.lang.Object[][],%20java.lang.Object[]%29

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63
    dato un foglio xls, voglio ottenere 2 strutture:
    un vettore [] che contiene l'intestazione della tabella
    una matrice [][] che contiene la restante parte della tabella


    in modo che poi io possa visualizzare il vettore e la matrice in una jtable.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Ottenere i valori delle celle di xls o csv

    Originariamente inviato da mauc
    deve essere visualizzato in una jtable.
    Ripeto meglio (oltre a quanto ho già detto nell'altra discussione): dal momento che la tua applicazione web Java "gira" sul server, far eseguire qualcosa sul client è un pochino delicato (per una applet andrebbe meglio perché è in una pagina web che la tua webapp può generare) ma la questione ancora più critica sarebbe quella di come passare i dati dal server alla applicazione sul client (girano poi su JVM differenti!).

    E comunque se pensi solo a JTable stai "guardando" solo il punto finale (e pure più critico) e non ad altri aspetti più "a monte".

    Originariamente inviato da mauc
    La domada è, dato questo file xls o csv (che contiene solo stringhe), come posso ottenere una struttura dati per andare a creare la jtable?
    Sì il punto è questo ma prima precisa:
    - sei riuscito nella tua webapp a gestire l'upload del documento per averlo in qualche modo sul server?
    - hai deciso se usare una soluzione "fai-da-te" per il parsing del file o se sfruttare una qualche libreria già esistente? (in quest'ultimo caso vedi la ricerca con Google java csv parser)
    - se hai deciso per il parsing fai-da-te, riesci o sei già riuscito a leggere il documento perlomeno "a righe"?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63
    form.jsp

    Codice PHP:
    <html>
        <
    head>
            <
    title></title>
            <
    meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        </
    head>
        <
    body>
            
            <
    form action="Controller" method="post" enctype="multipart/form-data">
                
                <
    input type="file" name="fileUpload"/>
                <
    input type="submit" value="Invia"/>
            </
    form>
            
        </
    body>
    </
    html
    controller.java (servlet)
    Codice PHP:
    protected void processRequest(HttpServletRequest requestHttpServletResponse responsethrows ServletExceptionIOException {
            
    response.setContentType("text/html;charset=UTF-8");
            
    PrintWriter out response.getWriter();
            
            
            
    boolean isMultipart ServletFileUpload.isMultipartContent(request);

            if(
    isMultipart){
                try {
                    
    DiskFileItemFactory factory = new DiskFileItemFactory();

                    
    ServletFileUpload upload = new ServletFileUpload(factory);
                    List 
    items upload.parseRequest(request);
                    
    Iterator itr items.iterator();
                    
                    while(
    itr.hasNext()) {
                        
    FileItem item = (FileItemitr.next();

                        if(!
    item.isFormField()) {
                            
    File fullFile  = new File(item.getName()); 
                            
    File savedFile = new File(getServletContext().getRealPath("/"), fullFile.getName());
                            
    //scrivo l'item nel file "savedFile"
                            
    item.write(savedFile);
                        }
                        
    //out.println("nome " + item.getName() );lo stampa
                        
                    
    }
                    
    out.println("File salvato");
                    
                } catch (
    Exception e) {
                    
    out.println("errore: "+e.getMessage());
                }
            }
        } 
    il file viene salvato in C:\Users\Utente\Documents\NetBeansProjects\Prog\bu ild\web


    ho fatto poi questa prova



    Codice PHP:
    protected void processRequest(HttpServletRequest requestHttpServletResponse response)
                
    throws ServletExceptionIOExceptionBiffException {
            
    response.setContentType("text/html;charset=UTF-8");
            
    PrintWriter out response.getWriter();
            try {
                
    String filePath="C://Users//Utente//Desktop//mod.xls";
            
            
    FileInputStream fs = new FileInputStream(new File(filePath));
            
            
    WorkbookSettings ws null;
            
    Workbook workbook null;
        
    Sheet s null;
        
    Cell rowData[] = null;
            
    int rowCount 0;
        
    int columnCount 0;
        
    int totalSheets 0;
            
            
    ws = new WorkbookSettings();
        
    workbook Workbook.getWorkbook(fsws);
            
            
    totalSheets workbook.getNumberOfSheets();
        
            
            
    workbook.getSheet(0);
            
    columnCount=s.getColumns();
            
            
    String [] nome = new String [columnCount];
            
    Object columnNames[] = new Object [columnCount];
            
            for(
    int i=0i<columnCount;i++){
                
    out.print(s.getCell(i0).getContents());
                
    //columnNames[0] =s.getCell(i, 0).getContents();
            
    }
            
            
    rowCount s.getRows();
            
    columnCount s.getColumns();
            
            for (
    int i 1rowCounti++) {
                
    rowData s.getRow(i);
                if (
    rowData.length 1) {
                    for (
    int j 0columnCountj++) {
                        if (
    rowData[j] != null)
                            
    out.println(rowData[j].getContents());
                    }
                }
            }
                
            } finally {            
                
    out.close();
            }
        } 
    e il risultato è che mi stampa il documento .xls nel browser, ma su un'unica riga.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mauc
    codice:
            for (int i = 1; i < rowCount; i++) {
                rowData = s.getRow(i);
                if (rowData.length > 1) {
                    for (int j = 0; j < columnCount; j++) {
                        if (rowData[j] != null)
                            out.println(rowData[j].getContents());
                    }
                }
            }
    e il risultato è che mi stampa il documento .xls nel browser, ma su un'unica riga.
    Non ho modo/possibilità di provare in questo momento il codice che hai postato ma se dici che funziona, ok.

    Dici che stampa tutto su una unica riga .... ma è ovvio: ogni cella la stampi su una riga del documento, quindi guardando il sorgente puro della pagina vedresti N righe. Ma il documento è un HTML e in HTML i newline sono (salvo casi particolari) ininfluenti e quindi se lo vedi dal browser lo vedì come hai detto.

    Comunque sei riuscito ad iterare sulle righe e per ognuna a iterare sulle colonne .... i dati delle celle quindi li hai. Ora devi stabilire cosa farne di questi dati: generi una pagina web con una <table> ? O sei proprio ostinato ad usare JTable di Swing (che ripeto, comporta questioni abbastanza spinose) ?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63
    usando le table di html, come devo fare?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mauc
    usando le table di html, come devo fare?
    Beh ma scusa, sai come si usano i <table>, <tr> e <td>? Qui non centra Java ... ma solo semplice e puro HTML (-> google).

    E poi comunque oltre a "buttare" in output i vari tag per la tabella nei punti e momenti giusti durante i cicli di scansione di righe/colonne, dovresti anche preoccuparti di scrivere il contenuto delle celle come HTML corretto, cioè generando le "entità" HTML per i caratteri speciali (es. < e > ma anche eventuali altri).

    Per questo motivo generalmente non è una buona cosa farlo fare ad una servlet o altro codice Java "puro". Preferibilmente sarebbe meglio farlo in una JSP e sfruttando magari i custom tag di JSTL (o altra tag library simile) che consentono di iterare e scrivere dati in modo semplice e pulito.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63
    dopo diversi tentativi, di inserimento del tag <tr> ci son riuscito, sn felicissimoooooooo


    ora devo poter selezionare le colonne che voglio

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mauc
    ora devo poter selezionare le colonne che voglio
    Puoi fare come vuoi, non è che c'è uno "standard" preciso. Puoi mettere un checkbox in testa ad ogni colonna, puoi gestire il click sul header delle colonne o anche su una qualunque cella. E magari evidenziare espressamente le colonne cambiando lo sfondo (JavaScript/JQuery aiutano).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.