Duvida Jakarta POi

Estou aprendendo a utilizar a API para manipular dados utilizando planilhas no excel.

Duvida que tenho é a seguinte

Supondo q eu tenha a formula C1 = A1 + B1
obs: eu coloquei a formula tanto via o java pra testar, quanto manualmente.
Ao setar os valores de a1 e b1 via a api e abrir o a planilha a mesma nao contém o valor de C1 atualizado.
Alguem sabe me dizer porque, ou se eu tenho que fazer algo em c1 tbm, olhei os métodos forneceidos pela Api e nao achei nenhum que “recalculasse” o valor da mesma, apesar que acho que isso deveria ser automatico no excel.

Desde já agradeço atenção.

[]'s

Fernando

Problema depois de alguns vários testes ocorre depois que eu abro o arquivo no microsoft office, pois ele automaticamente pega todas as funções e recalcula os resultados.

Mas ai surge outro problema:

Se eu crio tudo utilizando a api, funciona perfeitamente, mas nas colunas onde fórmulas são inseridas, eu não consigo obter o resultado do cálculo do mesmo (o valor da coluna).

Se eu insiro as fórmulas pelo office, a api não as identifica, como consequencia não atualiza o valor final se alterado alguma coluna que faça parte da fórmula.

Alguem sabe pq? ou alguma outra forma de trabalhar com planilhas do excel.

[]s

Fernando

Bom depois mais um tempo mexendo, consegui obter resultados desejados. Atento que depois de abrir o arquivo no microsoft office ele não sei o que acontece nao permite alterar, e fórmulas novas, deve ser adicionadas pelo java para evitar conflitos.

Posso depois ta disponibilizando algum tutorial pra quem tiver interesse. (e vo tentar descobrir o pq do erro dps q aberto no microsoft office).

[]s

Fernando

Alguns anos depois…

Atualmente tive o mesmo problema, em que na minha aplicação seria necessário inserir (formulas, números e texto) tanto manualmente, quanto via java.

A maneira que encontrei para resolver este problema foi que depois de alterar os valores com o java eu reescrevo o conteúdo de cada célula.

Um exemplo do que fiz

    public static void main(String[] args) {
        HSSFWorkbook w = null;
        try {
            w = new HSSFWorkbook(new FileInputStream("matriz.xls"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("atualizando...");
        for ( int i = 0 ; i < w.getNumberOfSheets(); i++) {
            HSSFSheet s = w.getSheetAt(i);
            for (int j = 0 ; j < 65536 ; j++) {
                Row r = s.getRow(j);
                if( r != null ){
                    for( int h = 0 ; h < 256 ; h++){
                        Cell a = r.getCell(h);
                        if( a != null){
                            if( a.getCellType() == Cell.CELL_TYPE_FORMULA )
                                a.setCellFormula( a.getCellFormula() );
                        }
                    }
                }
            }
        }
        try {
            FileOutputStream fileOut = new FileOutputStream("matriz.xls");
            w.write(fileOut);
            fileOut.close();
            System.out.println("atualizado!!!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

espero ter ajudado :smiley: