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.
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
Rômulo,
O assunto é perfeito para uma discussão no nosso fórum:
http://www.tomasvasquez.com.br/forum
Nos vemos lá!
Abraços
Tomás
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