Ajuda em leitura e alteracao de aquivo excel usando POI

eu tenho uma classe que le perfeitamente as celulas que eu escolho.Eu uso a seguinte sintaxe para iniciar a classe

POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(caminho));

mas quando eu quero alterar alguma celula, nada acontece, a nao ser que eu use a minha outra classe que eu tenho que cria e grava dados em celulas do meu documento *.xls , que termina com :

    FileOutputStream stream = 
        new FileOutputStream("c:/JavaExcel/planilhaTeste2.xls"); // criar o arquivo de planilha no local especificado
    wb.write(stream);

como posso ler e alterar uma celula na mesma classe.
alguem pode me mostrar um exemplo? eles separados em classes diferentes eu consigo.

abraco

Aliche

Hum, eu nunca usei essa classe ’ POIFSFileSystem’…

Eu não vou ter o código aqui, mas eu usei direto o HSSFWorkbook

 HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream("arquivo_de_entrada.xls"));

Pelo que eu me lembro, isso funcionava. Dava para pegar e editar numa boa, desde que no final eu gravasse as alterações com o que vc passou:

FileOutputStream stream = new FileOutputStream("arquivo_de_saida.xls");
   wb.write(stream); 

Relendo sua pergunta, eu tive a impressão que vc não pode não ter entendido a dinâmica da coisa… Ao abrir um arquivo, o XLS é armazenado na memória, e é alterado conforme necessário. As modificações só são gravadas em algum arquvo quando damos o ‘write’. Pode ser essa a sua dificuldade…

É, era tudo na mesma classe…

Infelizmente eu não tenho como te ajudar mais :?

eu entendi sim a parte do write, só que eu tentei usar o POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(caminho)); para ler o arquivo, e o FileOutputStream stream =
new FileOutputStream(“c:/JavaExcel/teste.xls”); // criar o arquivo de planilha no local especificado
wb.write(stream); para depois gravar as alteracoes e os deois juntos deu erro.

vou tentar usar direto o HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(“arquivo_de_entrada.xls”));

obrigado

package br.com.triscal;

import java.io.FileInputStream;

import java.io.FileOutputStream;

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 LerExcel {
public static void main(String[] args) {
try {
String caminho =“C:/JavaExcel/teste.xls”;

       HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(caminho));
       HSSFSheet sheet    = wb.getSheetAt(0);  //primeira pagina do doc *.xls.
       HSSFRow row1 = sheet.getRow(303);  // identifica a variavel "row1" como referente a linha 1,isso determinado pelo numero entre parenteses
       
       HSSFRow row2 = sheet.getRow(1);  //identifica a variavel "row2" como referente a linha 2,isso determinado pelo numero entre parenteses
       
       
        
       HSSFCell cell;
       HSSFCell cel2; 
       HSSFCell cel3; 
       HSSFCell cel;
       HSSFCell cel4;
       HSSFCell cel5;

                                
       cell= row1.getCell((short)14);  //pega o conteudo da celula 1 da linha 1

                        
       System.out.println("Conteúdo da celula na 15º coluna e na 304º linha é  :"+cell);

      
    FileOutputStream stream = 
        new FileOutputStream("c:/JavaExcel/teste.xls"); // criar o arquivo de planilha no local especificado
    wb.write(stream);
     
     
        } catch (Exception e) {
        e.printStackTrace();
    }
}

}

ele da o seguinte erro utilizando a leitura e escrita na msma classe:

java.io.FileNotFoundException: c:\JavaExcel\teste.xls (O arquivo já está sendo usado por outro processo)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.(FileOutputStream.java:179)
at java.io.FileOutputStream.(FileOutputStream.java:70)
at br.com.triscal.LerExcel.main(LerExcel.java:54)
Process exited with exit code 0.

pode me ajudar?

Eu não olhei o código, mas pelo erro aparentemente vc já está com este arquivo aberto (inclusive o excel).

Mas eu creio que o motivo seja que vc está usando o mesmo arquivo para ler e escrever. Tente dar outro nome para o arquivo de saída e veja se funciona.

Hum, se for isso mesmo e vc REALMENTE precisar que seja salvo com o mesmo nome, vc pode procurar por algum tipo de FileStream que seja input e output ao mesmo tempo. Se é que isso existe. Ou vc pode tentar ‘fechar’ o input stream ( sei lá como) depois de usá-lo.

por isso que esta dando problema, e isso é um update.
vou tentar aqui.
vlw