Pessoal no codigo abaixo deixei comentado as linhas em que o programa funciona normalmente, ou seja gera as celulas no arquivo excel.
Mas estou tentando deixar o codigo mais pratico sem ter que entrar celula a celula.
Gostaria de saber se tem como pegar os gets dentro do laço for.
Retornar todos os gets de uma só vez.
objTipo.getCodigo(), objTipo.getTipo() e objTipo.getStatus();
int r = 1;
for(Tipo objTipo : lstTipos){
Row row = sheet.createRow(r++);
// //codigo
// Cell cellCodigo = row.createCell(0);
// cellCodigo.setCellValue(objTipo.getCodigo());
//
// //nome
// Cell cellTipo = row.createCell(1);
// cellTipo.setCellValue(objTipo.getTipo());
//
// //secao
// Cell cellStatus = row.createCell(2);
// cellStatus.setCellValue(objTipo.getStatus());
for(int i=0; i < qdeCampos; i++){
Cell cell = row.createCell(i);
cell.setCellValue(objTipo.getTipo());
}
r++;
}
Quanto ao excel, não tenho idéia.
Quanto ao título do tópico:
Como retornar os todos os gets de um objeto
Tem este exemplo:
public class Encadear {
private int num = 5;
private String txt = "texto";
private boolean teste = true;
public int getNum() {
return num;
}
public String getTxt() {
return txt;
}
public boolean isTeste() {
return teste;
}
//pegando todas as SAÍDAS dos processamentos realizados por todos os getters
public Object[] allGetters() {
return new Object[]{getNum(), getTxt(), isTeste()};
}
//Considero este método mais adequado, pois talvez não seja interessante pegar tudo, apenas parte dos atributos
public Object[] allNecessary() {
return new Object[]{num, teste};
}
public static void main(String[] args) {
Object[] objetos = new Encadear().allGetters();
System.out.println(objetos[0] + " " + objetos[1] + " " + objetos[2]);
System.out.println((int) objetos[0] * 2);
}
}
-
Vc pode criar uma espécie de “Result” em que armazena as informações num objeto, como no exemplo de @addller
-
Usar um método para criar as células (Recomendo!!!)
public static void preencherCelulas1(Row row, Tipo objTipo) {
// codigo
row.createCell(0).setCellValue(objTipo.getCodigo());
// nome
row.createCell(1).setCellValue(objTipo.getTipo());
// secao
row.createCell(2).setCellValue(objTipo.getStatus());
}
-
Usar uma lista de funções e executar uma a uma num método (não recomendo, mas acho interessante)
private static final Function<Tipo, Object> GET_CODIGO = Tipo::getCodigo;
private static final Function<Tipo, Object> GET_TIPO = Tipo::getTipo;
private static final Function<Tipo, Object> GET_STATUS = Tipo::getStatus;
private static final List<Function<Tipo, Object>> FUNCTIONS_LIST = Arrays.asList(GET_CODIGO, GET_TIPO, GET_STATUS);
public static void preencherCelulas2(Row row, Tipo objTipo) {
for (int i = 0; i < FUNCTIONS_LIST.size();i++) {
row.createCell(i).setCellValue(FUNCTIONS_LIST.get(i).apply(objTipo));
}
}
Também não conheço essa ferramenta do excel, mas provavelmente seja mais prático assim mesmo, célula a célula
Obrigado amigos funcionou com a dica do addller e ficou assim
Na classe do modelo ficou assim:
public Object[] allGetters() {
return new Object[]{getCodigo(), getTipo(), getStatus()};
}
private void GerarParaExcel() {
//ESTE METODO FOI GERADO UTILIZANDO A BIBLIOTECA POI ONDE O MESMO ACESSA A BASE DE
//DADOS E GERA UM RELATORIO NO EXCEL
String nomeCampo = null;`Texto pré-formatado`
//recuperando a qde de colunas da tabela
int qdeCampos = 0;
qdeCampos = umabiblio.retornaQdeColunasDaTabela("tbltipos");
//recuperando os nomes das colunas da tabela
ArrayList<String> lstNomesColunas = umabiblio.recuperarNomesColunas("tbltipos");
//selecionar o local para salvar o arquivo
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filtro = new FileNameExtensionFilter("Arquivos de excel", "xls");
chooser.setFileFilter(filtro);
chooser.setDialogTitle("Salvar arquivo");
chooser.setMultiSelectionEnabled(false);
//se escolheu um local valido
if(chooser.showSaveDialog(null)==JFileChooser.APPROVE_OPTION){
//passando o caminho completo do nome do arquivo a ser gerado
String nomeArquivo = chooser.getSelectedFile().toString().concat(".xls");
try
{
List<Tipo> lstTipos = tipoDAO.gerarListaTiposSQL(sqlDefault);
//criando o cabecalho
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Lista de Tipos"); //nome da aba a ser cridada
Row cabecalho = sheet.createRow(0);
for(int i=0; i < qdeCampos; i++){
//passando os nomes das colunas para o cabeçalho atraves dos nomes retornados pelo array
nomeCampo = lstNomesColunas.get(i);
cabecalho.createCell(i).setCellValue(nomeCampo);
//formatando o cabeçalho
HSSFCellStyle estiloCabecalho = workbook.createCellStyle();
HSSFFont font = workbook.createFont();
font.setFontName(HSSFFont.FONT_ARIAL);
font.setFontHeightInPoints((short)10);
estiloCabecalho.setFont(font);
estiloCabecalho.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER);
cabecalho.getCell(i).setCellStyle(estiloCabecalho);
}
//para começar na segunda linha depois do cabecalho
int r = 1;
//iterando a lista e criando as celulas o arquivo excel
for(Tipo objTipo : lstTipos){
for(int i=0; i < qdeCampos; i++){
//allGetters foi criado no modelo da classe Tipo para que sejam gerados todos os gets de todos os atributos como acima
Object[] objetos = objTipo.allGetters();
Cell cell = row.createCell(i);
cell.setCellValue((String) objetos[i].toString());
}
r++;
for(int i=0; i < qdeCampos; i++){
//tamanho das celulas automaticas
sheet.autoSizeColumn(i);
}
}
//salvar o arquivo excel
FileOutputStream out = new FileOutputStream(new File(nomeArquivo));
workbook.write(out);
out.close();
JOptionPane.showMessageDialog(null, "Arquivo Excel gerado com sucesso!");
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}