Jump to content

Recommended Posts

Posted (edited)

Olá!

Já efectuei pesquisa e encontrei código para exportar informação de uma datagridview para excel, no entanto, o que eu pretendia era ter um excel já com um layout definido previamente guardado, onde depois o programa carregava nesse excel a informação da datagridview.

No código que vou colocar, apenas consigo criar um excel novo.

Podem dar-me uma ajuda sff

Private Sub Button73_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button73.Click
	' Exporta e abre o Microsoft Excel
	ExportToExcel(Me.DataGridView1, xlsOption.xlsOpen)
	' Exporta e grava o ficheiro na localização indicada
	'ExportToExcel(Me.DataGridView1, xlsOption.xlsSaveAs, "C:\DISCO2\DESENVOLVIMENTO\SCCOND\fraccoes.xls")
End Sub

' Criar uma nova instância do Excel
Dim objExcelApp As New Excel.Application
Enum xlsOption
	xlsSaveAs
	xlsOpen
End Enum
''' <summary>
''' Exporta a informação de uma DataGridView para o Microsoft Excel
''' </summary>
''' <param name="dgvName">DataGridView1</param>
''' <param name="option">SaveAs</param>
''' <param name="filename">C:\DISCO2\DESENVOLVIMENTO\SCCOND\fraccoes.xls</param>
Public Sub ExportToExcel(ByVal dgvName As DataGridView, ByVal [option] As xlsOption, Optional ByVal fileName As String = "")
	Dim objExcelApp As New Excel.Application()
	Dim objExcelBook As Excel.Workbook
	Dim objExcelSheet As Excel.Worksheet
	Try
		' Se foi seleccionada a opção xlsSaveAs e não foi indicado ficheiro
		If [option] = xlsOption.xlsSaveAs And fileName = String.Empty Then
			MessageBox.Show("É necessário indicar um nome para o ficheiro")
			Exit Sub
		End If
		' Altera o tipo/localização para Inglês. Existe incompatibilidade  
		' entre algumas versões de Excel vs Sistema Operativo
		Dim oldCI As CultureInfo = CurrentThread.CurrentCulture
		CurrentThread.CurrentCulture = New CultureInfo("en-US")
		' Adiciona um workbook e activa a worksheet actual
		objExcelBook = objExcelApp.Workbooks.Add
		objExcelSheet = CType(objExcelBook.Worksheets(1), Excel.Worksheet)
		' Ciclo nos cabeçalhos para escrever os títulos a bold/negrito
		Dim dgvColumnIndex As Int16 = 1
		For Each col As DataGridViewColumn In dgvName.Columns
			'AQUI SE DEFINE EM QUE LINHA COMEÇA A SER ESCRITO O CABEÇALHO NO EXCEL
			objExcelSheet.Cells(3, dgvColumnIndex) = col.HeaderText
			objExcelSheet.Cells(1, dgvColumnIndex).Font.Bold = True
			dgvColumnIndex += 1
		Next
		' Ciclo nas linhas/células
		'AQUI SE DEFINE EM QUE LINHA COMEÇA A SER ESCRITAS AS LINHAS NO EXCEL
		Dim dgvRowIndex As Integer = 4

		For Each row As DataGridViewRow In dgvName.Rows
			Dim dgvCellIndex As Integer = 1

			For Each cell As DataGridViewCell In row.Cells
				objExcelSheet.Cells(dgvRowIndex, dgvCellIndex) = cell.Value
				dgvCellIndex += 1
			Next
			dgvRowIndex += 1
		Next
		' Ajusta o largura das colunas automaticamente
		objExcelSheet.Columns.AutoFit()
		' Caso a opção seja gravar (xlsSaveAs) grava o ficheiro e fecha
		' o Workbook/Excel. Caso contrário (xlsOpen) abre o Excel
		If [option] = xlsOption.xlsSaveAs Then
			objExcelBook.SaveAs(fileName)
			objExcelBook.Close()
			objExcelApp.Quit()
			MessageBox.Show("Ficheiro exportado com sucesso para: " & fileName)

		Else
			objExcelApp.Visible = True
		End If
		' Altera a tipo/localização para actual
		CurrentThread.CurrentCulture = oldCI
	Catch ex As Exception
		MessageBox.Show("Erro não identificado. Mensagem original:" & vbNewLine + ex.Message)
	Finally
		objExcelSheet = Nothing
		objExcelBook = Nothing
		objExcelApp = Nothing
		' O GC(garbage collector) recolhe a memória não usada pelo sistema.  
		' O método Collect() força a recolha e a opção WaitForPendingFinalizers
		' espera até estar completo. Desta forma o EXCEL.EXE não fica no  
		' Task Manager(gestor tarefas) ocupando memória desnecessariamente
		' (devem ser chamados duas vezes para maior garantia)
		GC.Collect()
		GC.WaitForPendingFinalizers()
		GC.Collect()
		GC.WaitForPendingFinalizers()
	End Try
End Sub
Edited by sergiotmcardoso
Adicionado bloco código

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.