GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

[Resolvido] Exportar Jtable para Excel (Erro caso uma das celulas Date esteja Vazia)

#1

Fala Galera!

Pessoal, estou com um probleminha aqui para exportar os dados da minha Jtable para Excel, está funcionando perfeitamente, porém tem um campo Date chamado Finalização, este eu sempre deixo vazio e só preencho quando finalizo o processo, o problema está aqui, quando este campo Date está vazio meu método de exportar não exporta nada, somente uma planilha vazia, segue os códigos para voces darem uma olhada:

Método para exportar Jtable:

//Metodo exportar tabela para Excel
    public void toExcel(JTable table, File file) throws IOException {
        TableModel model = table.getModel();
        FileWriter excel = new FileWriter(file);
        for (int i = 0; i < model.getColumnCount(); i++) {
            excel.write(model.getColumnName(i) + "\t");
        }
        excel.write("\n");
        for (int i = 0; i < model.getRowCount(); i++) {
            for (int j = 0; j < model.getColumnCount(); j++) {
                excel.write(model.getValueAt(i, j).toString() + "\t");
            }
            excel.write("\n");
        }
        excel.close();
        System.out.println("write out to: " + file);
    }

Evento Click do botão para exportar:

//Botão Exportar Tabela para Excel
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        JFileChooser fc = new JFileChooser();
        int option = fc.showSaveDialog(RdiGrid);
        if (option == JFileChooser.APPROVE_OPTION) {
            String filename = fc.getSelectedFile().getName();
            String path = fc.getSelectedFile().getParentFile().getPath();
            int len = filename.length();
            String ext = "";
            String file = "";
            if (len > 4) {
                ext = filename.substring(len - 4, len);
            }
            if (ext.equals(".xls")) {
                file = path + "\\" + filename;
            } else {
                file = path + "\\" + filename + ".xls";
            }
            try {
                toExcel(RdiGrid, new File(file));
            } catch (IOException ex) {
                Logger.getLogger(formRdi.class.getName()).log(Level.SEVERE, null, ex);
            }
        }                                        
    }
0 Likes

#2

Não está disparando uma NullPointerException nesses casos?

0 Likes

#3

ViniGodoy obrigado pelo rápido retorno, mas acabei de resolver o problema, mas é bom deixar por aqui pois sempre há dúvidas deste tipo.

O problema é que quando o campo estava vazio ele retornava null no Jtable ai o método para exportar não reconhecia esse campo Date como null e gerava o erro.
Alterei minha classe do pacote Util onde pego os dados do MySql e transformo em String para poder jogar na Jtable porem quando for null ele retorna "" ai o método de exportar funciona.

Segue o método que carrega minha Jtable, repare na linha onde dou um get no campo Date ("Finalização") que é o que estava me dando problemas:

RdiDAO RdiDAO = new RdiDAO();
        List<Rdi> listaRdi = RdiDAO.obterTabela();
        Object colunas[] = {"RDI", "Abertura", "Finalizacao", "Status", "Envio_999", "Gera_NQ", "Claim", "Processo", "Gabarito", "BIN", "Material", "Quantidade", "Responsavel", "Setor", "Causa_Raiz", "Erro_Identificado", "Analise_Acao", "Contagem_Saldo", "Recontagem", "Varredura_FGI", "Auditoria_LT24", "Varredura_RW_NCM", "Varredura_Inbound", "Auditoria_Entrada", "Varredura_Agendamento", "Auditoria_Delivery", "Auditoria_Saida", "Revezamento"};
        DefaultTableModel model;
        model = new DefaultTableModel(colunas, 0) {
            @Override
            public boolean isCellEditable(int row, int col) {
                return false;
            }
        };
        for (Rdi rdis : listaRdi) {
            Object row[] = {
                rdis.getRDI(),
                Util.dateToString(rdis.getAbertura()),
                Util.dateToString(rdis.getFinalizacao()), //Aqui dava erro porque trazia null, veja o código abaixo onde trato o retorno de null para ""
                rdis.getStatus(),//3
//             ............continua

Pacote Util que trata o campo Date que resolveu meu problema:

//Metodo para transformar Data xxxx-xx-xx em String para poder jogar no Jtatble ou nos campos do formulário como xx/xx/xxxx
    public static String dateToString(java.util.Date data) {
        if(data != null){
        String dataFormatada = new SimpleDateFormat("dd/MM/yyyy").format(data);
        return dataFormatada;
        }else{
            return ""; //Aqui é que o coelho pula da cartola
        }
    }

Valeu!

0 Likes

fechou #4
0 Likes