tenho um codigo que gera um arquivo do word, mas ele ta ficando corrompido!
Alguem me socorre em JAVA + Word PELO AMOR DE DEUS
12 Respostas
alguém pode me ajudar?
A gente agradeceria se você postasse o código :lol: :lol: :lol:
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!
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.
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.
nunca precisei fazer isso.
E não se fala Word para se referir a .doc. Uso o OpenOffice e no entando uso .doc
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…
é 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.
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:
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
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
é verdade,
agente sempre tem que criar um jeitinho brasileiro para resolver estes bugs.