POI + Java + Euro

13 respostas
jLady

Olá,

Andei pesquisando e vi que muita gente tem o mesmo problema que eu, mas nao consegui encontrar solução, então se alguém souber como ajudar, ficarei muito grata.

O problema é o seguinte:

Obrigatoriamente tenho que usar o POI para gerar o excel da minha app, e os templates do excel já estao prontos, e nao posso modificá-los, pois são usados por outras aplicações também.
Portanto qualquer formatação e coisas do genero devem ser feitas pelo POI.
Até aí tudo bem, tenho 3 condições onde o símbolo de moeda pode ser $, £ ou ?
O problema é o Euro, já tentei de todas as maneiras e todos os tipos de codificação e o excel nao mostra o simbolo como ?, mostra Ç, ¬ entre outros.

Se alguém souber a resposta, por favor me responda

Grata

13 Respostas

Eric_Yuzo

Fiz um exemplinho simples e testei no Calc do OpenOffice com sucesso. Creio que não vá apresentar complicação no excel.

Estou postando todo o código de criação para aqueles que tenham curiosidade sobre o POI. :wink:
//Criação da pasta de trabalho (Não sei o nome técnico rsrs).
HSSFWorkbook wb = new HSSFWorkbook();
//criação da planilha.
HSSFSheet sheet = wb.createSheet("Minha planilha");
//Criação da linha.
HSSFRow row = sheet.createRow(0);

//Atribuição de valor a linha.
//Caractere unicode referente ao euro concatenada com uma string comum.
row.createCell(0).setCellValue('\u20AC' + " 0.00");

//Criação do arquivo no local especificado.
FileOutputStream stream = new FileOutputStream(
		"/home/myUser/Desktop/planilha.xls");
wb.write(stream);
Espero que ajude.

Abraços

[EDIT]Pelo que percebi você precisa que o próprio excel gere o caractere quando for digitado somente o valor. É isso?

jLady

Olá Eric,

Seria isso mesmo que voce escreveu, porém \u20ac quando vai pro excel aparece “¬”

Achei que poderia ser alguma zica da minha maquina, mas em uat também acontece as mesmas coisas, ja tentei unicode, ascii, colocar direto “?”…
Nada funciona com excel… no console ele imprime o valor certo, e pelo seu teste, no OpenOffice também…
Já não sei mais o que tentar…

Muitissimo grata pela ajuda, se tiver mais alguma ideia, ficarei muito feliz

:wink:

C

Depois de todo esse tempo… você descobriu a resposta?

Estou enfrentando o mesmo problema.

jLady

ainda nao descobri o que é…

estou tentando de tudo…
e o pior que tenho prazo pra entregar isso funcionando…

=/

estou aberta a sugestoes

Eric_Yuzo

Engraçado, testei no excel 2003 e funcionou. Tanto com o código que postei como utilizando DataFormat. Estou usando o Apache POI 3.6.

Já tentaram usar \u0080?

jLady

é estranho mesmo isso… aqui em vez do simbolo de euro, aparece um quadradinho…

=/

Eric_Yuzo

Fucei um pouco e consegui setando o charset como symbol:

E utilizando ‘\u0080’ para representar o caractere:

Espero que desta forma funcione. hehe

jLady

Olá Eric,

Não consegui usar esse metodo setCharSet…
Encontrei na API, mas nao consigo usar.

Tem alguma coisa diferente a ser feita para que funcione?

M

Olá JLady!
Tudo bom? Eu fiz uns testes aqui e consegui imprimir o simbolo de euro em uma planilha com o POI
No poi que usei aqui, o metodo .setCellValue(String value) esta depreciado.
Isso já não é um bom sinal, procurem usar métodos não depreciados, como o .setCellValue(HSSFRichTextString value).
Usando o HSSFRichTextString foi possivel colocar o simbolo de euro como simbolo na string, assim não precisa se matar procurando o valor dele na tabela ASCII, UTF e sei la mais qual!
rsrsrs!

Bjus lady! tem msn?? manda por pm pra mim!
=D
Tem namorado??

Ps.: Eu anexei um arquivo com uma classe em txt para testar, é só colar em um projeto netbeans, ou eclipse, mudar o path e adicionar a biblioteca do POI.

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        double d = 132.32;
        TestePOI poi = new TestePOI(d);
    }

    /**
     *
     * @author Administrador
     */
    public static class TestePOI {

        double varTest = 0;

        public TestePOI(double valor) {
            this.varTest = valor;
            criaCarregaSheet(varTest);
        }

        private void criaCarregaSheet(double varTest) {
            HSSFWorkbook wb = new HSSFWorkbook();
            HSSFSheet sheet = wb.createSheet("planTest");
            HSSFRow row = sheet.createRow(0);

            //No post esta aparecendo interrogação, mas é o simbolo de Euro!
            HSSFRichTextString strng = new HSSFRichTextString("? " + varTest);
            row.createCell(0).setCellValue(strng);
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream("C:\\plan.xls");
            } catch (FileNotFoundException ex) {
                Logger.getLogger(TestePOI.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                wb.write(fos);
            } catch (IOException ex) {
                Logger.getLogger(TestePOI.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

Eric_Yuzo

jLady:
Olá Eric,

Não consegui usar esse metodo setCharSet…
Encontrei na API, mas nao consigo usar.

Tem alguma coisa diferente a ser feita para que funcione?

O método setCharSet é da classe HSSFFont, que eu chamei a partir do retorno do método getFontAt da classe HSSFWorkbook.

O problema foi para chamar o método ou para visualizar o caractere?

jLady

Creio que meu problema seja a versão do POI…
aqui a versão é antiga…
entao esses métodos nem existem na classe Font
assim como o exemplo que o marcos deu também não funciona pois os métodos nao aceitam HSSFRichTextString…
eu vou tentar atualizar o POI aqui e ver no que dá…

qualquer novidade posto aqui, e se alguem tiver ideias melhores…

ainda estou aberta a sugestoes…

ivesbertoli

Alguem já usou POI com Word ???
Estou tentando substituir alguns trechos do arquivo e salvar com outro nome, só que não consigo !!!
Ele duplica tudo !!!

InputStream arquivoCarregado = TesteWord.class.getClassLoader().getResourceAsStream("modelof.docx");
        XWPFDocument word = new XWPFDocument(arquivoCarregado);
        XWPFDocument destino = new XWPFDocument();
        for (XWPFParagraph p : word.getParagraphs()) {
            XWPFRun r = p.createRun();
            r.setText(p.getParagraphText().replaceAll("@Contrato","iiiii"));

        }


        FileOutputStream output = new FileOutputStream("/tmp/teste.docx");
        word.write(output);
jLady

Então… com word eu nunca usei…
Mas meu problema com excel eu descobri que a única maneira de fazer funcionar era atualizar o meu POI.

Criado 8 de setembro de 2010
Ultima resposta 13 de set. de 2010
Respostas 13
Participantes 5