Ler arquivo XML gerado pelo Excel (VBA)

1 resposta
D

Olá pessoal, gostaria de uma ajuda para importar um arquivo XML gerado pelo MS Excel por meio da macro (VBA), pois quando eu gero o arquivo XML pelo java eu consigo carregar para meu objeto "Pedido" normalmente, mas quando eu vou carregar o arquivo gerado pelo Excel me retorna um erro e não consigo carregar as informações para o meu objeto.

O problema é que o meu programa precisa carregar o XML gerado pelo Excel, que será enviado pelos clientes.

Arquivo gerado pelo Java (XStream-1.4.2 e dom4j-1.6.1):
- <pedido>
-     <cliente>
          <clienteId>589</clienteId> 
      </cliente>
-     <itens>
-         <item>
              <produtoId>330</produtoId> 
              <descricao>EMB 84 PÇS EM CX PAP</descricao> 
              <quantidade>100.0</quantidade> 
              <desconto>49.4</desconto> 
         </item>
-        <item>
              <produtoId>708331/01</produtoId> 
              <descricao>CONC LIGHT LARANJA</descricao> 
              <quantidade>133.0</quantidade> 
              <desconto>44.0</desconto> 
          </item>
      </itens>
  </pedido>

Arquivo gerado pelo MS Excel 2003 por macro VBA:

- <pedido>
-     <cliente>
          <clienteId>589</clienteId> 
      </cliente>
-     <itens>
-         <item>
              <produtoId>330</produtoId> 
              <descricao>EMB 84 PÇS EM CX PAP</descricao> 
              <quantidade>100.0</quantidade> 
              <desconto>49.4</desconto> 
         </item>
-        <item>
              <produtoId>708331/01</produtoId> 
              <descricao>CONC LIGHT LARANJA</descricao> 
              <quantidade>133.0</quantidade> 
              <desconto>44.0</desconto> 
          </item>
      </itens>
  </pedido>

Mensagem de erro ao carregar o XML gerado pelo Excel:

Exception in thread "AWT-EventQueue-0" com.thoughtworks.xstream.converters.ConversionException: For input string: "
589  " : For input string: "
589  "
---- Debugging information ----
message             : For input string: "
589  "
cause-exception     : java.lang.NumberFormatException
cause-message       : For input string: "
589  "
class               : java.lang.Integer
required-type       : java.lang.Integer
converter-type      : com.thoughtworks.xstream.converters.SingleValueConverterWrapper
wrapped-converter   : com.thoughtworks.xstream.converters.basic.IntConverter
path                : /pedido/cliente/clienteId
xpath               : /pedido/cliente/clienteId
class[1]            : classes.Cliente
converter-type[1]   : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
class[2]            : classes.Pedido
version             : null

Agora eu não entendo, pois mesmo os arquivos sendo idênticos um dá erro e o outro não, se alguém ouder me ajudar eu agradeço.

Classes:
public class Cliente{
    	private int clienteId;
	private String Nome;

//getters and setters
}
public class Cotacao {
	private int pedidoID;
        private Cliente cliente;
	private List<Item> item;
        private String status;
        private String usuario;

//getters and setters
}
public class Item {
    
	private int numLinha;
        private int itemId;
	private String produtoId;
	private String descricao;
	private double quantidade;
	private double desconto;

//getters and setters
}

Obrigado

1 Resposta

D

RESOLVIDO

O código que está gerando o XML, estava concatenando o conteúdo da célula com a constante vbCrLf que adiciona um espaço com a quebra de linha

strOutput = strOutput & "  <cliente>" & vbCrLf
        strOutput = strOutput & "  <clienteId>" & vbCrLf
            strOutput = strOutput & Range("A4").Text
        strOutput = strOutput & "    </clienteId>" & vbCrLf
            
    strOutput = strOutput & "  </cliente>" & vbCrLf

E assim ele gera o XML sem os espaços.

strOutput = strOutput & "  <cliente>" & vbCrLf
        strOutput = strOutput & "  <clienteId>"
            strOutput = strOutput & Range("A4").Text
        strOutput = strOutput & "</clienteId>" & vbCrLf
            
    strOutput = strOutput & "  </cliente>" & vbCrLf
Criado 2 de agosto de 2012
Ultima resposta 2 de ago. de 2012
Respostas 1
Participantes 1