Windows Forms - Acesso ao Excel
Para trabalhar com o objetos do Microsoft Office precisa :
1-project-add reference-.com-Microsoft Excel 12.0 Object Library
2-Projeto-propriedades-compilar-CPU Destino=x86.
Se o seu Office for 32 bits você deve compilar o programa em 32 bits porque
se o programa for programado pelo default, 64 bits, não conseguirá chamar as dlls do office em 32 bits.
3-Precisa do Excel instalado na máquina.
Imports Microsoft.Office.Interop.Excel
Module Excel
Exportando dados de um datagridview para o Excel
''' <summary>
''' Esta função exporta um datagridview para o Excel
''' </summary>
''' <param name="NomeArqXLS">Nome do arquivo excel-Se não existir ele cria e se existir ele grava em cima</param>
''' <param name="Planilha">Planilha dentro do arquivo a armazenar as informações- Se não existir cria e se existir escreve em cima</param>
''' <param name="DTG">DatagridView com os dados a serem enviados para o Excel</param>
''' Se o arquivo excel não existir ele cria
''' se a planilha excel não existir ele cria
''' caso exista ele abre, atribui/salva dados dgv e fecha
Public Sub ExportaDGVExcel(NomeArqXLS As String, Planilha As String, ByVal DTG As DataGridView)
Dim xlApp As Microsoft.Office.Interop.Excel.Application 'precisa do Excel instalado no micro
Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook 'Arquivo Excel
Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet 'Planilha Excel
Dim flgArqExcelExiste As Boolean = False 'true = já existe o arquivo excel existe
Dim flgPlanExiste As Boolean = False 'true = já existe a planilha dentro do arq excel
Dim misValue As Object = System.Reflection.Missing.Value
Try
'criando a app Excel
xlApp = New Microsoft.Office.Interop.Excel.Application
'xlApp.Visible = True
If IO.File.Exists(NomeArqXLS) Then
'abrindo o arquivo excel
xlWorkBook = xlApp.Workbooks.Open(NomeArqXLS)
flgArqExcelExiste = True 'arq excel já existe
Else
'Novo documento Excel
xlWorkBook = xlApp.Workbooks.Add()
flgArqExcelExiste = False 'arq excel novo
'MsgBox("Arquivo não encontrado:" + NomeArqXLS)
'Exit Sub
End If
'verificando se a planilha existe
flgPlanExiste = False
For Each xs In xlWorkBook.Sheets
If xs.Name = Planilha Then
flgPlanExiste = True 'a planilha já existe
Exit For
End If
Next xs
'abrindo a planilha
If flgPlanExiste = True Then
xlWorkSheet = xlWorkBook.Worksheets(Planilha)
Else
'Planilha não existe...criando a planilha solicitada
'Dim newWorkbook As Excel.Workbook = xlApp.Workbooks.Add()
'xlWorkSheet = xlWorkBook.Worksheets.Add(Planilha)
'xlWorkBook = xlApp.Workbooks.Add(misValue)
xlWorkSheet = CType(xlApp.Worksheets.Add(), Microsoft.Office.Interop.Excel.Worksheet)
xlWorkSheet.Name = Planilha
End If
'salvando os headers de coluna do dgv-linha 1
Dim c As Integer
For c = 0 To DTG.Columns.Count - 1
xlWorkSheet.Cells(1, c + 1) = DTG.Columns(c).Name
Next
'salvando os dados do dgv - linha 2 em diante
Dim l As Integer
For c = 0 To DTG.Columns.Count - 1
For l = 1 To DTG.Rows.Count - 1
xlWorkSheet.Cells(l + 1, c + 1) = DTG.Rows(l - 1).Cells(c).Value
'.Range(celula).Value = DTG.Rows(li).Cells(I).Value
Next
Next
If flgArqExcelExiste = True Then 'o arquivo já exite
'xlWorkBook.Close(SaveChanges:=False)
xlWorkBook.Close(SaveChanges:=True)
'xlWorkBook.SaveToFile(NomeArqXLS) 'este arquivo tem que existir
Else
'xlWorkBook.Close(SaveChanges:=True)
xlWorkBook.SaveAs(NomeArqXLS) 'nesta opção ele cria o arquivo
End If
'display the cells value B2
'MsgBox(xlWorkSheet.Cells(2, 2).value)
'xlWorkBook.SaveAs("d:\csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue,
'Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue)
'xlWorkBook.Close(True, misValue, misValue)
xlApp.Quit()
LiberaObjeto(xlApp)
LiberaObjeto(xlWorkBook)
LiberaObjeto(xlWorkSheet)
MsgBox("FIM")
Catch ex As Exception
MsgBox("Ocorreu um erro:" + ex.Message)
xlApp.Quit()
LiberaObjeto(xlApp)
LiberaObjeto(xlWorkBook)
LiberaObjeto(xlWorkSheet)
End Try
End Sub
Private Sub LiberaObjeto(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
End Module