Ajuda em leitura e alteracao de aquivo excel usando POI

5 respostas
A

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

5 Respostas

C

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 :?

A

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

A

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?

C

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.

A

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

Criado 16 de outubro de 2007
Ultima resposta 17 de out. de 2007
Respostas 5
Participantes 2