Alguem me socorre em JAVA + Word PELO AMOR DE DEUS

12 respostas
argentinaluiz

tenho um codigo que gera um arquivo do word, mas ele ta ficando corrompido!

12 Respostas

argentinaluiz

alguém pode me ajudar?

gqferreira

A gente agradeceria se você postasse o código :lol: :lol: :lol:

argentinaluiz

try
{

java.io.File Arquivo = new java.io.File(2F.doc);

java.io.InputStream inputStream=null;

inputStream = new java.io.FileInputStream(Arquivo);

POIFSFileSystem fs = new POIFSFileSystem(inputStream);

HWPFDocument document = new HWPFDocument(fs);

Range range = document.getRange();

javax.swing.JLabel a;

range.replaceText(“1”,“Luiz”,0);

FileOutputStream output = new FileOutputStream(a.doc);

document.write(output);

output.close();

}catch(Exception e){e.printStackTrace();JOptionPane.showMessageDialog(this,“Arquivo Etiqueta Não Encontrado!”,“Mensagem de Erro”,JOptionPane.ERROR_MESSAGE);}

o problema não no código, mas na api do poi do apache, pq testei com a mais antiga e deu certo e com a mais nova não deu! Eu preciso fazer rodar na mais nova porque ela tem outras funções adicionais que eu preciso utilizar!

gqferreira
package Mini_Editor_de_texto;
import java.awt.*;
import java.awt.event.*;
import java.io.FileReader;
import java.io.PrintWriter;

import javax.swing.*;
import javax.swing.event.*;

public class Frame extends JPanel {
    private JButton abrir;
    private JButton salvar;
    private JButton sair;
    private TextArea jtext;
    public String texto;
   // private JScrollPane sp;
    
    public Frame() {
        //construct components
        abrir = new JButton ("Abrir");
        salvar = new JButton ("Salvar");
        sair = new JButton ("Sair");
        jtext = new TextArea (5, 5);
        //JScrollPane sp = new JScrollPane();
        //adjust size and set layout
        setPreferredSize (new Dimension (346, 314));
        setLayout (null);

        //add components
        add (abrir);
        add (salvar);
        add (sair);
        add (jtext);
        //sp.add(jtext);
        //set component bounds (only needed by Absolute Positioning)
        abrir.setBounds (10, 10, 100, 25);
        salvar.setBounds (120, 10, 100, 25);
        sair.setBounds (230, 10, 100, 25);
        jtext.setBounds (10, 50, 325, 255);
        //sp.setBounds(10, 50, 325, 255);
        sair.addActionListener(new ActionListener()
    	{
    	public void actionPerformed(ActionEvent e)
    	{
    	System.exit(0);			
    	}	
    	});
        
        abrir.addActionListener(new ActionListener()
    	{
    	public void actionPerformed(ActionEvent e)
    	{
    		texto="";
    		JFileChooser fileChooser = new JFileChooser();
    		fileChooser.setDialogTitle("Abrir");
    		fileChooser.showOpenDialog(null);
    		String arquivo = fileChooser.getSelectedFile().getAbsolutePath();	
    	//String arquivo = JOptionPane.showInputDialog(null, "Forne�a o arquivo a ser lido", "Abrir arquivo",JOptionPane.PLAIN_MESSAGE);		
    	//String texto="";
    	try
    		{
    			
    		FileReader in = new FileReader(arquivo);
    			int I = in.read();
    			while (I!=-1)
    			{
    				texto = texto + (char)I;
    				I = in.read();
    				
    			}
    		}
    	catch (Exception erro) 
    		{
				texto = "Erro: "+erro.toString();
    		}
        	
    	jtext.setText(texto);
    	}	
    	
    	});
    
        salvar.addActionListener(new ActionListener()
    	{
    	public void actionPerformed(ActionEvent e)
    	{
    	
    		try
    		{
    			JFileChooser fileChooser = new JFileChooser();
        		fileChooser.setDialogTitle("Salvar");
        		
        		//Isso aqui pega o n�mero do bot�o precionado, Exemplo: 
        		//"Abrir" vale 0, "Cancelar" vale 1.
        		int a = fileChooser.showSaveDialog(null);
        		
        		if (a==0)
        		{	
	        		String arquivo = fileChooser.getSelectedFile().getAbsolutePath();	
	    			System.out.println(arquivo);
	    			texto=jtext.getText();
	    			PrintWriter in = new PrintWriter(arquivo+".doc");
	            	in.println(texto);
	            	in.close();
	            	JOptionPane.showMessageDialog(null, "Salvo com sucesso!", "Arquivo salvo", JOptionPane.INFORMATION_MESSAGE);
        		}
        		
    		}
    	catch (Exception erro) 
    	{
    		JOptionPane.showMessageDialog(null, "ERRO!"+erro.toString());
		}
    	}
    		
    	});
    
    }


 
 public static void main (String[] args) 
      {
        JFrame frame = new JFrame ("Mini Editor de Texto");
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add (new Frame());
        frame.pack();
        frame.setVisible (true);
      }

    
    
     
}

Esse é um exemplo antigo que tenho mas que sempre funcionou perfeitamente, faça suas alterações.

argentinaluiz

o seu código ler e gravar arquivos com codificação .txt mesmo que a extensão salva seja .doc.
Tem-se que usar a api poi para realmente trabalhar com word.

gqferreira

nunca precisei fazer isso.

E não se fala Word para se referir a .doc. Uso o OpenOffice e no entando uso .doc

HelderC

A api poi, é um plugin? Ou eu preciso do Apache instalado para poder usá-la?
Dei uma olhada no site da poi: http://jakarta.apache.org/poi/index.html e pelo que percebi ainda está em desenvolvimento…

argentinaluiz

é uma framework java normal.

nao precisa ter apache instalado nao, ela apenas é construida pela fundacao apache
e para usa-la é só colocar no classpath do seu projeto.

Mero_Aprendiz
try
   {
   
 java.io.File Arquivo = new java.io.File("2F.doc");   
 java.io.InputStream inputStream=null; 
 inputStream = new java.io.FileInputStream(Arquivo);
 POIFSFileSystem fs = new POIFSFileSystem(inputStream);   
 HWPFDocument document = new HWPFDocument(fs);
 Range range = document.getRange();
javax.swing.JLabel a;

  range.replaceText("1","Luiz",0); 

 
 FileOutputStream output = new FileOutputStream("a.doc");   
 document.write(output);
 output.close();
}catch(Exception e){
e.printStackTrace();JOptionPane.showMessageDialog(this,"Arquivo Etiqueta Não Encontrado!","Mensagem de Erro",JOptionPane.ERROR_MESSAGE);
}

Você tentou gravar o arquivo que você está lendo, ao invéz de gerar um novo arquivo?

[]'s
JL

P.S.: Use as tags de [code]. Fica mais fácil de ler! :wink:

argentinaluiz

na verdade nao encontrei solucao para este problema, mas percebi o seguinte

a funcao

range.replaceText();

com tres parametros era o problema, quando eu a usava o arquivo ficava corrompido,
quando usava a esta funcao com dois parametros, o arquivo gera normal.
Entao percebi que o problema era versao da poi que eu estava usando e nao me lembro qual.
Fiz uma forma de usar a funcao com 2 parametros, mas na verdade como tem um tempo que nao uso o poi,
pode ser que este problema tenha sido resolvido nas versoes seguintes.

flw

Fernando_H_Gomes

Pelo que sei esse projeto da apache POI foi descontinuado.
voce esta querendo substituir valores de um documento certo ?

um colega meu ja teve um problema parecido…
parece que o poi corrempe o arquivo se o tamanho do novo valor for diferente do valor que voce esta pegando no documento…

acho que ele resolveu usando serviços do openOffice …
serviços ou classes sei la.
GL

argentinaluiz

é verdade,

agente sempre tem que criar um jeitinho brasileiro para resolver estes bugs.

Criado 28 de abril de 2009
Ultima resposta 24 de fev. de 2010
Respostas 12
Participantes 5