VB .NET - Convertendo XML para Excel


 Neste artigo vou mostrar como converter arquivos XML em planilhas do Excel.

Este é um artigo básico que mostrar como ler o conteúdo de um arquivo XML e escrever o mesmo conteúdo para um arquivo EXCEL, no formato .xlsx.

Neste exemplo estou usando um XmlReader para ler o arquivo XML para um DataSet e após percorrer o DataSet estou adicionando o conteúdo para um arquivo Excel.

A classe XmlReader fornece uma acesso somente-leitura e somente-para-frente de um fluxo de dados Xml, e, esta em conformidade com as recomendações do W3C Extensible Markup Language (XML) 1.0.

No fluxo de dados XML o nó atual refere-se ao nó no qual o leitor(reader) esta posicionado, sendo que o leitor é avançado usando qualquer um dos métodos de leitura e propriedades que refletem o valor do nó atual.

Embora, como já foi mencionado, a plataforma .NET forneça as implementações concretas para a classe XmlReader através das classes XmlTextReader, XmlNodeReader e XmlValidatingReader, a partir da versão 2.0 da plataforma a recomendação é criar instâncias de XmlReader usando o método Create.

A classe XmlReader suporta a leitura da dados XML a partir de um arquivo ou fluxo de dados. Ela define métodos e propriedades que nos permitem  mover através dos dados e ler o conteúdo de um nó.

De forma geral a classe XmlReader oferece os seguintes recursos:

Nota: Para saber mais sobre conceitos XML leia o artigo: XML - eXtensible Markup Language - Introdução

Recursos usados :

Lendo XML e convertendo para Excel

Abra o VS Community 2015  e clique em New Project;

A seguir selecione Visual Basic -> Windows -> Windows Forms Application;

Informe o nome Criar_Excel_XML e clique no botão OK;

No formulário padrão form1.vb inclua os seguintes controles:

Disponha os controles conforme o leiaute da figura :

 Precisamos incluir uma referência a biblioteca do Excel em nosso projeto:

No menu PROJECT clique em Add Reference;

Clique na guia COM e a seguir selecione - Microsoft Excel 12.0 Object Library - e clique em OK;

Nota: Dependendo da versão do seu Excel instalada a biblioteca pode ter outra versão;

Defina os seguintes namespaces no formulário:

Imports System
Imports
System.Windows.Forms
Imports
System.Xml
Imports
Excel = Microsoft.Office.Interop.Excel

No evento Click do botão para localizar os arquivos XML, digite o código a seguir:

  Private Sub LocalizarXML_Click(sender As Object, e As EventArgs) Handles LocalizarXML.Click
        Dim ofd1 As New OpenFileDialog
        With ofd1
            .Multiselect = True
            .Title = "Selecionar XML"
            .InitialDirectory = "C:\Dados"
            'filtra para exibir somente arquivos xml
            .Filter = "Images (*.XML)|*.XML|" + "Todos (*.*)|*.*"
            .CheckFileExists = True
            .CheckPathExists = True
            .FilterIndex = 1
        End With
        Dim dr As DialogResult = ofd1.ShowDialog()
        If (dr = System.Windows.Forms.DialogResult.OK) Then
            txtArquivoXML.Text = ofd1.FileName
        End If
    End Sub

Agora no evento Click do botão de comando - Ler e Converter para o Excel - inclua o código abaixo:

 Private Sub btnConverterXML_Excel_Click(sender As Object, e As EventArgs) Handles btnConverterXML_Excel.Click
        Dim xlApp As Excel.Application
        Dim xlWorkBook As Excel.Workbook
        Dim xlWorkSheet As Excel.Worksheet
        Dim misValue As Object = System.Reflection.Missing.Value
        Dim arquivoXML As String
        Dim arquivoExcel As String
        Dim ds As New DataSet
        Dim xmlFile As XmlReader
        Dim i, j As Integer
        Try
            If Not String.IsNullOrWhiteSpace(txtArquivoXML.Text) Then
                arquivoXML = txtArquivoXML.Text
                LerXML()
            Else
                Return
            End If
            xlApp = New Excel.Application
            xlWorkBook = xlApp.Workbooks.Add(misValue)
            xlWorkSheet = xlWorkBook.Sheets("Plan1")
            xmlFile = XmlReader.Create(arquivoXML, New XmlReaderSettings())
            ds.ReadXml(xmlFile)
            For i = 0 To ds.Tables(0).Rows.Count - 1
                For j = 0 To ds.Tables(0).Columns.Count - 1
                    xlWorkSheet.Cells(i + 1, j + 1) = ds.Tables(0).Rows(i).Item(j)
                Next
            Next
            arquivoExcel = DateTime.Now.Millisecond & "_" & txtNomePlanilhaExcel.Text
            xlWorkSheet.SaveAs("c:\dados\" & DateTime.Now.Millisecond & arquivoExcel)
            xlWorkBook.Close()
            xlApp.Quit()
            liberaObjetosExcel(xlApp)
            liberaObjetosExcel(xlWorkBook)
            liberaObjetosExcel(xlWorkSheet)
            MessageBox.Show("Conversão Concluída com sucesso." & vbCrLf & "Verifica na pasta C:\dados" & vbCrLf & "O arquivo : " & arquivoExcel)
        Catch ex As Exception
            MessageBox.Show("Erro : " & ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

 

O método liberaObjetosExcel() possui o código a seguir:

 Private Sub liberaObjetosExcel(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try
    End Sub

Neste código liberamos os objetos Excel que foram instanciados em memória.

A rotina LerXML() que lê o conteúdo do arquivo XML e exibe no arquivo texto é dada abaixo:

 Private Sub LerXML()
        Try
            txtDados.Text = My.Computer.FileSystem.ReadAllText(txtArquivoXML.Text)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

No código usamos o recurso My para ler o arquivo XML.

Executando o projeto e selecionando um arquivo XML teremos o resultado:

Abrindo o arquivo 276_Produtos_Excel.xlsx gerado na pasta c:\dados temos :

Pegue o projeto completo aqui:  Criar_Excel_XML.zip

Porque a palavra da cruz é loucura para os que perecem; mas para nós, que somos salvos, é o poder de Deus.
Porque está escrito: Destruirei a sabedoria dos sábios, E aniquilarei a inteligência dos inteligentes.

1 Coríntios 1:18,19

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti