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.
33 1313 Coca Cola 2L 3
alguém pode me ajudar?
É 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.
Obrigado Lincoln vou pesquisar e ver como consigo, assim que eu conseguir posto o código.
Você teria um código de exemplo pra me mostrar?
Cara, fiz aqui um exemplo de como ler a planilha, jogar no HashMap e pegar as quantidades…
`
import java.io.Closeable;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
*
* @author Lincoln
*/
public class TestePOI {
public static void main(String[] args) throws Exception {
Map<Produto, Integer> produtos = new HashMap<Produto, Integer>();
File planilha = new File("c:/Temp/planilha.xls");
Closeable wb = 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.
XSSFWorkbook workbook = new XSSFWorkbook(planilha);
//recupera a primeira aba da planilha.
XSSFSheet sheet = 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.Workbook workbook = WorkbookFactory.create(planilha);
//recupera a primeira aba da planilha.
org.apache.poi.ss.usermodel.Sheet sheet = 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()) {
Row row = iteradorLinhasPlanilha.next();
//se for a linha de cabeçalho pula.
if (row.getRowNum() == 0) {
continue;
}
//cria um novo produto
Produto produto = new Produto();
//pega cada celula da linha
Cell cell = 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 hashmap
if (produtos.containsKey(produto)) {
produtos.put(produto, produtos.get(produto) + 1);
} else {
produtos.put(produto, 1);
}
}
} catch (Exception ex) {
Logger.getLogger(TestePOI.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (wb != null) {
try {
wb.close();
} catch (IOException ex) {
Logger.getLogger(TestePOI.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
//percorre o hashmap
for (Produto produto : produtos.keySet()) {
System.out.println("Produto: " + produto.getDescricao() + "\nQuantidade: " + produtos.get(produto) + "\n");
}
}
}
class Produto {
private int id;
private int codigo;
private String descricao;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getCodigo() {
return codigo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@Override
public int hashCode() {
return this.codigo;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Produto) {
Produto produto = (Produto) obj;
return this.codigo == produto.codigo;
}
return false;
}
}
`
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.