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 comentários em “VBA – Macro para exportar dados em XML no Excel”

  1. 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

Os comentários estão fechados.