Bom dia, eu estou fazendo um programa que compara o conteúdo das celulas do excel. Porem eu nunca usei POI, nem Jexcel. Já faz um tempo que eu to tentando, mas a falta de experiencia atrapalha. Eu consigo ler o arquivo e escreve nele usando POI, mas não tenho ideia de como comparar. Já com Jexcel eu consigo ler, mas não consigo escrever e tento comparar, mas ele compara errado. Alguém poderia me ajudar?
Eu tenho preferência por POI, mas se alguém puder me ajudar usa Jexcel não tem problema.
debugar resolve
coloque seu codigo aew pra mim ver
Eu tenho esse com POI
public class Novamente extends JFrame{
JButton procura;
JFileChooser arq1;
Sheet st;
Permanente per;
FileOutputStream out;
String ji;
public Novamente() {
setLayout(null);
procura = new JButton("Procurar");
procura.setBounds(100, 50, 80, 30);
add(procura);
setVisible(true);
setSize(500, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
procura.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
out = null;
try{
JFileChooser fopen = new JFileChooser( );
fopen.showOpenDialog(null);
FileInputStream hi = new FileInputStream(fopen.getSelectedFile());
POIFSFileSystem arqq= new POIFSFileSystem(hi);
HSSFWorkbook hwb = new HSSFWorkbook(arqq);
Sheet sheet1 = hwb.getSheetAt(0);
for (Row row:sheet1) {
for (Cell cell : row) {
System.out.print(cell.toString());
System.out.print("\t");
}
System.out.print("\n");
}
try {
ji=new String("/home/Documentos/workbook.xls");
FileOutputStream out = new FileOutputStream(ji);
hwb.write(out);
File file = new File(ji);
Desktop.getDesktop().open(file);
} catch (Exception e) {
// TODO: handle exception
}
}catch(Exception e){
e.printStackTrace();
}
}
});
}
}
E tambem tenho esse usando Jexcel
class Permanente {
Cell[] cel,cel2;
String a,b,conteud,conteudo;
int i,ka,j;
Label d;
ComJXL com;
public Permanente() {
try {
j=0;
Workbook workbook = Workbook.getWorkbook(new File("Arquivo.xls"));
Sheet sheet = workbook.getSheet(0);
File diret = new File("/home/Documentos");
File arq = new File(diret,"nossa.xls");
FileOutputStream fileWriter = new FileOutputStream(arq,false);
PrintWriter pw = new PrintWriter(fileWriter);
int linhas = sheet.getRows();
int colu = sheet.getColumns();
for(int i = 0;i<linhas;i++){
cel=sheet.getRow(i);
{
for(int j=0;j<colu;++j){
cel2=sheet.getColumn(j);
conteud= cel[j].getContents();
conteudo= cel2[i].getContents();
if (cel[i].getContents().equals(cel2[j].getContents())) {
System.out.println(conteud+" -OK- "+conteud);
}
}
}
}
pw.write(conteud);
pw.flush();
pw.close();
} catch (Exception e) {
}
}
}
cara vc tem a celula, vc consegue pegar no poi celltype, getCellNum,getNumericCellValue e outros não?
se for numero primitivo compare assim ex: (getCellNum == getCellNum)
se for um objeto vc pode usar ‘compareTo’, se for String use o equals
acho que isso resolve
falow
com o apache POI:
Row row = sheet.getRow(2);
Cell cell = row.getCell(3);
Cell cell1 = row.getCell(4);
if (cell.equalsIgnoreCase(cell1))
//do something
Mas ai ele vai ficar como o Jexcel, comparando a mesma celula de forma que sempre sera igual. Eu queria uma forma de pegar e comparar uma linha e coluna. Mas como todos os valores estao salvos na mesma variavel eu nao estou conseguindo. E eu nao posso colocar a posiçao pois o arquivo xls tem mais de 5 mil linhas
Achei a solução eu usei Jxl mesmo, pode não ter sido a melhor resposta, mas foi a que funcionou.
linhas = sheet.getRows();
colu = sheet.getColumns();
for(int i = 0;i<linhas;i++){
for(int j=0;j<colu;j++){
tu=sheet.getCell(j,i);
}
if (sheet.getCell(0,i).getContents().equals(sheet.getCell(1,i).getContents())) {
System.out.println(sheet.getCell(0,i).getContents()+" -OK- "+sheet.getCell(1,i).getContents());
}
}
for(int j=0;j<colu;j++){
for(int i = 0;i<linhas;i++){
eu=sheet.getCell(4,i);
if (sheet.getCell(0,j).getContents().equals(sheet.getCell(1,i).getContents())) {
System.out.println(sheet.getCell(0,j).getContents()+" -OK- "+sheet.getCell(1,i).getContents());
}
}
}