Verificar a quantidade de exibição de um mesmo item e somar a quantidade para gravar
5 respostas
J
jodenni
Olá pessoal gostaria de uma ajuda se possível por favor.
estou com uma planilha de produtos onde um sistema terceirizado exporta um arquivo xls
de produtos, porem o que acontece é que a exportação, manda um arquivo onde cada vez que estiver o produto
ele repete o produto e a quantidade sempre é um, alguém poderia me ajudar, e sabe se consigo criar um sistema
que lê a planilha xls e através do código contar a quantidade e que esta na planilha este é exemplo da minha planilha
ex
id código descrição quantidade
33 1313 Coca Cola 2L 1
34 1455 Pepsi 2L 1
35 1214 Guarana Antartica 1
36 1313 Coca Cola 2L 1
37 1313 Coca Cola 2L 1
observe que a descrição coca cola repete 3 vezes eu queria que aparecesse a descrição 1 unica vez
porem acrescentando a quantidade total de 3.
É possível, procure pela biblioteca Apache POI, que você consegue manipular planilhas através dela.
Você leria o arquivo e colocaria em uma Collection e faria o tratamento…
Eu particularmente colocaria num HashMap onde a chave seria o código (ou até mesmo o objeto) e o valor seria a quantidade de vezes que ele aparece…
Depois com o mesmo Apache POI você poderia montar a planilha de saída.
J
jodenni
Obrigado Lincoln vou pesquisar e ver como consigo, assim que eu conseguir posto o código.
J
jodenni
Você teria um código de exemplo pra me mostrar?
LincolnStuart
Cara, fiz aqui um exemplo de como ler a planilha, jogar no HashMap e pegar as quantidades…
`
importjava.io.Closeable;importjava.io.File;importjava.io.IOException;importjava.util.HashMap;importjava.util.Iterator;importjava.util.Map;importjava.util.logging.Level;importjava.util.logging.Logger;importorg.apache.poi.ss.usermodel.Cell;importorg.apache.poi.ss.usermodel.Row;importorg.apache.poi.ss.usermodel.WorkbookFactory;importorg.apache.poi.xssf.usermodel.XSSFSheet;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;/** * * @author Lincoln */publicclassTestePOI{publicstaticvoidmain(String[]args)throwsException{Map<Produto,Integer>produtos=newHashMap<Produto,Integer>();Fileplanilha=newFile("c:/Temp/planilha.xls");Closeablewb=null;//cria objeto para iteracao de linhas.Iterator<Row>iteradorLinhasPlanilha;try{//verifica qual a extensao da planilha para preencher o objetos workbook e sheet de maneira correta.if(planilha.getName().endsWith(".xlsx")){//cria uma planilha completa com todas as abas.XSSFWorkbookworkbook=newXSSFWorkbook(planilha);//recupera a primeira aba da planilha.XSSFSheetsheet=workbook.getSheetAt(0);//recupera o iterador de linhas da aba.iteradorLinhasPlanilha=sheet.iterator();//recupera o numero de linhas da aba.wb=workbook;}else{//cria uma planilha completa com todas as abas.org.apache.poi.ss.usermodel.Workbookworkbook=WorkbookFactory.create(planilha);//recupera a primeira aba da planilha.org.apache.poi.ss.usermodel.Sheetsheet=workbook.getSheetAt(0);//recupera o iterador de linhas da aba.iteradorLinhasPlanilha=sheet.iterator();//recupera o numero de linhas da aba.wb=workbook;}while(iteradorLinhasPlanilha.hasNext()){Rowrow=iteradorLinhasPlanilha.next();//se for a linha de cabeçalho pula.if(row.getRowNum()==0){continue;}//cria um novo produtoProdutoproduto=newProduto();//pega cada celula da linhaCellcell=row.getCell(0);produto.setId((int)cell.getNumericCellValue());cell=row.getCell(1);produto.setCodigo((int)cell.getNumericCellValue());cell=row.getCell(2);produto.setDescricao(cell.getStringCellValue());//preenche o hashmapif(produtos.containsKey(produto)){produtos.put(produto,produtos.get(produto)+1);}else{produtos.put(produto,1);}}}catch(Exceptionex){Logger.getLogger(TestePOI.class.getName()).log(Level.SEVERE,null,ex);}finally{if(wb!=null){try{wb.close();}catch(IOExceptionex){Logger.getLogger(TestePOI.class.getName()).log(Level.SEVERE,null,ex);}}}//percorre o hashmapfor(Produtoproduto:produtos.keySet()){System.out.println("Produto: "+produto.getDescricao()+"\nQuantidade: "+produtos.get(produto)+"\n");}}}classProduto{privateintid;privateintcodigo;privateStringdescricao;publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicintgetCodigo(){returncodigo;}publicvoidsetCodigo(intcodigo){this.codigo=codigo;}publicStringgetDescricao(){returndescricao;}publicvoidsetDescricao(Stringdescricao){this.descricao=descricao;}@OverridepublicinthashCode(){returnthis.codigo;}@Overridepublicbooleanequals(Objectobj){if(objinstanceofProduto){Produtoproduto=(Produto)obj;returnthis.codigo==produto.codigo;}returnfalse;}}
`
Não está muito bonito, se eu fosse você refatorava em métodos menores e organizava mais o código… mas é um exemplo funcional…
A planilha que fiz aqui segue este layout:
e a saída é a seguinte: Produto: Coca Cola 2L Quantidade: 1
Produto: Pepsi 2L Quantidade: 2
Acredito que ficou faltando você criar uma planilha de saída a partir das informações do Map.