VBA – Macro para exportar dados em XML no Excel

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.

Comentários

comentários

4 thoughts on “VBA – Macro para exportar dados em XML no Excel”

  1. Tomas,

    Bom dia,

    Achei muito interessante este codigo, porém estou precisando importar varios XMLs que estão em uma pasta, você teria algum codigo?

    Desde já agradeço a atenção.

    Romulo

  2. Tomas,

    Parabéns pelo artigo!
    Eu gostaria de fazer algo parecido só que com o Word. Eu preciso exportar sentenças de textos com seus respectivos comentários para um XML, algo como:

    Sub ExportarComentarios()
    Dim s As String
    Dim cmt As Word.Comment
    Dim doc As Word.Document

    s = “”
    For Each cmt In ActiveDocument.Comments
    CurPage = Selection.Information(wdActiveEndAdjustedPageNumber)

    s = s & “” & cmt.Scope.FormattedText & “” & “<>”
    s = s & “” & cmt.Initial & cmt.Index & “:” & cmt.Range.Text & “” & vbCr
    Next

    s = s & “”

    Set doc = Documents.Add
    doc.Range.Text = s
    End Sub

    O problema é que preciso saber de qual página é cada comentário para colocar isso no XML. No meu caso fica sempre em 1 e eu acredito que seja o numero da pagina do documento gerado. Você pode me ajudar?

    abs

    Alexandre

Comments are closed.