A partir da versão 2002 (XP), o Excel, bem como todos os programas do Office ganharam uma séria de artimanhas para manipular, importar, exportar e trabalhar no padrão XML.
Isso é bom e poderoso, mas tentando fazer uma exportação simples de uma planilha em um arquivo XML, naveguei pelas opções que o Excel oferecia e no final, acabei optando por fazer a exportação por VBA, já que precisava de algo rápido do “limpo”.
Não usei classes ou bibliotecas específicas para o trabalho. A criação do XML foi na mão mesmo. Abaixo segue o código que faz o trabalho:
Sub ExportToXml() Dim linha As Long, coluna As Long, colunas As Long linha = 2 colunas = ActiveSheet.UsedRange.Columns.Count Set fs = CreateObject("Scripting.FileSystemObject") Set a = fs.CreateTextFile(ThisWorkbook.FullName & ".xml", True) 'cria as primeiras linhas a.WriteLine ("<?xml version=""1.0"" encoding=""UTF-8""?>") a.WriteLine ("<" & ActiveSheet.Name & "s>") With ActiveSheet Do While Not IsEmpty(.Cells(linha, 1)) a.WriteLine (Chr(9) & "<" & ActiveSheet.Name & ">") For coluna = 1 To colunas Step 1 a.Write (Chr(9) & Chr(9) & _ "<" & .Cells(1, coluna).Value & ">" & _ RTrim(.Cells(linha, coluna).Value) & _ "</" & .Cells(1, coluna).Value & ">" & Chr(13)) Next a.WriteLine (Chr(9) & "</" & ActiveSheet.Name & ">") linha = linha + 1 Loop End With 'finaliza o arquivo a.WriteLine ("</" & ActiveSheet.Name & "s>") a.Close MsgBox "Finito!" End Sub |
Em detalhes, a macro navega a partir da segunda linha (a primeira deve ter os cabeçalhos ok?) e constrói o XML, sendo que os nós considerarão o nome da planilha, pluralizando-a, por exemplo, se o nome da planilha for Usuario, ele criará o nó Usuarios e cada elemento/linha como Usuario. O arquivo gerado tem o mesmo nome da planilha, mas com a extensão XML. De quebra, o XML vai indentado.
Uma mão na roda para exportação de dados limpos. Faça o teste e, bom proveito.