POI : Seria um BUG?

Pessoal,
estou usando o POI para preencher uma planilha excel 2003 (vários sheets). Pesquisando por erros que a planilha passou a apresentar depois de alterada através POI, fiz o seguinte teste :

package test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class testPOI {
	private static HSSFSheet resultSheet = null;

	public static void main(String[] args) {
		try {
			String inFile = "src/test/templateOrign.xls";
			String outFile = "src/test/templateRewrited.xls";
			
			POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(inFile));
			HSSFWorkbook workBook = new HSSFWorkbook(fs);
			
			FileOutputStream fileOut = new FileOutputStream(outFile);
			workBook.write(fileOut);
			fileOut.close();
			} catch (FileNotFoundException e1) {// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (IOException e) {// TODO Auto-generated catch block
				e.printStackTrace();
		}
	}
	protected static HSSFCell getCell(int col, int row) {
		HSSFRow xRow = resultSheet.getRow(row);
		HSSFCell cell = xRow.getCell((short)col);
		return cell;
	}
}

Pelo código estou apenas abrindo o arquivo e o salvando em outro. Procurando por erros na planilha “gerada”, achei diversas células que tem agora fórmulas que nada tem a ver com a original. Não consigui ainda identifcar um padrão. Exemplo de uma célula:
Fórmula original : =IF(ISNUMBER((D44D43)/(D44+D43));(D44D43)/(D44+D43);"")
Fórmula resultante : =D40-D36

Alguém já teve algum problema parecido ?
Excel 2003
Java 5.0
POI 3.0.2

Você sabia que POI significa Poorly Obfuscated Implementation e o formato que ele usa para ler excel é o HSSF que significa Horrible Stylesheet Format?

Ou seja, não existe qualquer garantia de compatibilidade ou perfeição na conversão. Talvez de fato você tenha achado um bug, neste caso tente um “report a bug” para os desenvolvedores.

A API POI nao é um excel completo a maioria das formulas não foram implementadas , passei por várias onde planilhas utilizam VLOOKUP ou PROCV…

OK … vocês teriam alguma sugestão ? Cheguei a usar acesso via ODBC. Funciona, mas preciso criar sheets rascunho uma vez que a planilha não tem um formato muito parecido com uma tabela típica ! em fim … o que vocês me sugeririam.

Vc tentou debugar o programa?
Veja qndo ele le uma celula com formula e perceba qual sera o comportamento verifique tbm se lancara alguma excecao…

Da para ter uma ideia do que precisa ser feito…

Na verdade Ramilani, o programa não gera nenhuma exceção. Eu até gostaria de entrar no código do POI para achar o que está ocorrendo. Mas, o programa que eu postei é extremamente simples ! Eu infelizmente preciso de uma solução rápida para o projeto e espero achar outro framework parecido. Caso eu não ache, eu devo optar pela opção ODBC mesmo !

Obrigado !

Se vc quer abrir o arquivo e salvar em outro nao teria a necessidade de utilizar POI para isso , utilize o pacote do java.io
ou algum motivo especial em utiliza-la?

Vou descrever o projeto:
Existe uma planilha em excel com uma série de cálculos que simulam o funcionamento de um circuito elétrico composto por geradores, transformadores e motores. A sua função principal é a de identificar possíveis “desbalanceamentos” em partes específicas do circuito a partir das especificações elétricas de cada um dos seus componentes. Como a quantidade de informações em projetos elétricos mais complexos é grande, a planilha chega a ser “ilegível” para esses casos. Por isso criamos uma interface em java onde pode-se montar o circuito através de um diagrama elétrico. Um dos requisitos do projeto exige que tal software seja validado através dessa planilha. Assim existe a necessidade de exportarmos tais informações para a planilha e recuperar os resultados gerados por ela, pelo menos nessa primeira fase.
Resumindo, inserimos dados em células específicas da planilha, executa-se uma macro de cálculos e então recuperamos os resultados em outras células da planilha. Dái a necessidade de usar o POI como interface entre JAVA e EXCEL. O código que postei é um teste que indica que os erros encontrados na planilha são decorrentes do processo que abre a planilha como um template e a exporta como resultado.
E uma versão seguinte esperamos implementar os cálculos em java para tornar o programa independente. Mas por enquanto a planilha é essencial.
Cheguei a testar a opção por ODBC e a princípio funciona bem ! Acho que estou sem opções provisórias melhores que essa !
De qualquer forma muito obrigado pela ajuda !

[quote=alex@ander]Vou descrever o projeto:
Existe uma planilha em excel com uma série de cálculos que simulam o funcionamento de um circuito elétrico composto por geradores, transformadores e motores. A sua função principal é a de identificar possíveis “desbalanceamentos” em partes específicas do circuito a partir das especificações elétricas de cada um dos seus componentes. Como a quantidade de informações em projetos elétricos mais complexos é grande, a planilha chega a ser “ilegível” para esses casos. Por isso criamos uma interface em java onde pode-se montar o circuito através de um diagrama elétrico. Um dos requisitos do projeto exige que tal software seja validado através dessa planilha. Assim existe a necessidade de exportarmos tais informações para a planilha e recuperar os resultados gerados por ela, pelo menos nessa primeira fase.
Resumindo, inserimos dados em células específicas da planilha, executa-se uma macro de cálculos e então recuperamos os resultados em outras células da planilha. Dái a necessidade de usar o POI como interface entre JAVA e EXCEL. O código que postei é um teste que indica que os erros encontrados na planilha são decorrentes do processo que abre a planilha como um template e a exporta como resultado.
E uma versão seguinte esperamos implementar os cálculos em java para tornar o programa independente. Mas por enquanto a planilha é essencial.
Cheguei a testar a opção por ODBC e a princípio funciona bem ! Acho que estou sem opções provisórias melhores que essa !
De qualquer forma muito obrigado pela ajuda ![/quote]

A melhor coisa seria eliminar o requisito de usar-se a planilha em excel. Qualquer outra coisa é melhor do que o excel. Mas, se você realmente não tiver a menor possibilidade de eliminá-lo, então não tem jeito, vai ser POG em cima de POG até fazer dar certo por mágica.