Ajuda com Matriz

5 respostas
C

Pessoal preciso de uma ajuda para montar uma matriz, com dados vindo de uma planilha em excel.

try {
           
            Workbook workbook = Workbook.getWorkbook(new File("c:/lista.xls"));
            Sheet sheet = workbook.getSheet(0); // pega a primeira aba
            Sheet[] abas = workbook.getSheets();


            String[][]matriz = new String [sheet.getRows()][sheet.getColumns()];
            
            //matriz.length -> representa as linhas da matriz
            //matriz[0].length-> pega o tamanho da linha [0], ou seja, pega o numero de colunas
            
            Cell[] cell; // instancia um array de celula que irá auxiliar no povoamento da matriz
            for(int i=0;i<matriz.length;i++){
               cell = sheet.getRow(i);
            for(int j=0;j<matriz[0].length;i++){
                matriz[i][j] = cell[j].getContents(); // linha onde está acusando o erro.
            }

            }
          for(int i=0;i<matriz.length;i++){
                 for(int j=0;i<matriz[0].length;j++){
                System.out.println(matriz[i][j]);
            }
                 System.out.println("");
            }
        } finally { 
            out.close();
        }

Só que está me retornando esse erro:

29/11/2011 08:18:10 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet ImportarXls threw exception
java.lang.ArrayIndexOutOfBoundsException: 17
        at Controlador.ImportarXls.processRequest(ImportarXls.java:55)
        at Controlador.ImportarXls.doPost(ImportarXls.java:100)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:662)

[/code]

5 Respostas

L

o Segundo loop esta errado :


for(int j=0;j<matriz[0].length;i++){
matriz[i][j] = cell[j].getContents(); // linha onde está acusando o erro.
}

faz assim :

for(int j=0;j&lt;matriz[i].length;j++){  
                matriz[i][j] = cell[j].getContents(); // linha onde está acusando o erro.  
            }
>
C

lgweb

Ele continua com erro na mesma linha:

for(int j=0;j<matriz[i].length;j++){
29/11/2011 08:41:10 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet ImportarXls threw exception
java.lang.ArrayIndexOutOfBoundsException: 17
        at Controlador.ImportarXls.processRequest(ImportarXls.java:54)
        at Controlador.ImportarXls.doPost(ImportarXls.java:100)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:662)
C

Quando eu dou um print no I e no J lista normalmente, será que é a ordem do for?

Lucas_Abbatepaolo

for(int j=0;j&lt;matriz[i].length - 1;j++){ >

C

Bom lucas, eu estava fazendo algumas confusões etre o i e o j. bom agora ele listou sem erro, porém um arquivo embaixo do outro, porém preciso imprimi esses dados no JSP em formato de tabela, você poderia me orientar?

preciso primeiro visualizar esse arquivo em jsp, depois importar esse dados para meu banco mysql.

try {
           
            Workbook workbook = Workbook.getWorkbook(new File("c:/myfile.xls"));
            Sheet sheet = workbook.getSheet(0); // pega a primeira aba
            Sheet[] abas = workbook.getSheets();


            String[][]matriz = new String [sheet.getRows()][sheet.getColumns()];
            
            //matriz.length -> representa as linhas da matriz
            //matriz[0].length-> pega o tamanho da linha [0], ou seja, pega o numero de colunas
            
            Cell[] cell; // instancia um array de celula que irá auxiliar no povoamento da matriz
            for(int i=0;i<matriz.length;i++){
               cell = sheet.getRow(i);
             //  System.out.println(matriz[i]);
            for(int j=0;j<matriz[i].length ;j++){
            //   System.out.println(cell[j].getContents());
                 matriz[i][j] = cell[j].getContents();
            }

            }

            for(int i=0;i<matriz.length;i++){
                 for(int j=0;j<matriz[i].length;j++){
               System.out.println(matriz[i][j]);
            }
                 System.out.println("");
            }
        } finally { 
            out.close();
        }
Criado 29 de novembro de 2011
Ultima resposta 29 de nov. de 2011
Respostas 5
Participantes 3