diego_10 0 Posted March 31, 2011 Report Share Posted March 31, 2011 Boas, Tive a pesquisar na net como se conseguia exportar uma datagrid para um documento excel e esse problema esta resolvido com este codigo : http://vbtuga.blogspot.com/2008/05/vbnet-exportar-datagridview-para-excel.html A minha duvida é esta, quando ele passa a datagrid envia todas as colunas visiveis e invisiveis, será que nao consigo enviar para o excel apenas o que esta visivel na datagrid? Cumprimentos a todos! Link to post Share on other sites
Caça 17 Posted March 31, 2011 Report Share Posted March 31, 2011 Claro, só tens de verificar se a coluna é visível, caso não seja, não passas. Se tiveres duvidas mostra o código que tens Pedro Martins Não respondo a duvidas por PM Link to post Share on other sites
diego_10 0 Posted March 31, 2011 Author Report Share Posted March 31, 2011 Enum xlsOption xlsSaveAS xlsOpen End Enum Public Sub ExportToExcel(ByVal dgvproducao 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 dgvproducao.Columns objExcelSheet.Cells(1, dgvColumnIndex) = col.HeaderText objExcelSheet.Cells(1, dgvColumnIndex).Font.Bold = True dgvColumnIndex += 1 Next ' Ciclo nas linhas/células Dim dgvRowIndex As Integer = 2 For Each row As DataGridViewRow In dgvproducao.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 Depois tenho chamo o ExportarToExcel no evento Click do botao Se me conseguires ajudar agradeço! Link to post Share on other sites
Caça 17 Posted March 31, 2011 Report Share Posted March 31, 2011 A verificaçã deve ser feita aqui For Each col As DataGridViewColumn In dgvproducao.Columns objExcelSheet.Cells(1, dgvColumnIndex) = col.HeaderText objExcelSheet.Cells(1, dgvColumnIndex).Font.Bold = True dgvColumnIndex += 1 Next e aqui For Each cell As DataGridViewCell In row.Cells objExcelSheet.Cells(dgvRowIndex, dgvCellIndex) = cell.Value dgvCellIndex += 1 Next Pedro Martins Não respondo a duvidas por PM Link to post Share on other sites
diego_10 0 Posted March 31, 2011 Author Report Share Posted March 31, 2011 Boas Pedro, Pois eu sei que a verificaçao tem de ser ai, mas como sera feita essa verificação? A minha principal duvida e essa... Cumprimentos Link to post Share on other sites
Caça 17 Posted March 31, 2011 Report Share Posted March 31, 2011 Como é feita? com um simples IF For Each col As DataGridViewColumn In dgvproducao.Columns If col.Visible = True Then objExcelSheet.Cells(1, dgvColumnIndex) = col.HeaderText objExcelSheet.Cells(1, dgvColumnIndex).Font.Bold = True dgvColumnIndex += 1 End If Next For Each cell As DataGridViewCell In row.Cells If cell.Visible = True Then objExcelSheet.Cells(dgvRowIndex, dgvCellIndex) = cell.Value dgvCellIndex += 1 End If Next Pedro Martins Não respondo a duvidas por PM Link to post Share on other sites
diego_10 0 Posted March 31, 2011 Author Report Share Posted March 31, 2011 pois, isso ja tinha feito no inicio e nao esta a funcionar :S Dai perguntar o como de o fazer, se possui outra maneira. Cumprimentos Link to post Share on other sites
Caça 17 Posted March 31, 2011 Report Share Posted March 31, 2011 O que é que não está a funcionar? Está a dar erro? Pedro Martins Não respondo a duvidas por PM Link to post Share on other sites
diego_10 0 Posted March 31, 2011 Author Report Share Posted March 31, 2011 Sim, esta a mandar na mesma as mesmas colunas. Cumprimentos, Diego Leite Link to post Share on other sites
Caça 17 Posted March 31, 2011 Report Share Posted March 31, 2011 If col.Visible = True Then Se a coluna estiver invisível não entra, não pode aparecer no cabeçalho da folha as colunas invisíveis Pedro Martins Não respondo a duvidas por PM Link to post Share on other sites
diego_10 0 Posted April 1, 2011 Author Report Share Posted April 1, 2011 Pois, dai eu perguntar como tava a fazer a validaçao e que me esta a aparecer e a condição esta igual a sua, ja a tinha feito antes e nao estava a funcionar, dai perguntar como a fazia. Cumprimentos Link to post Share on other sites
diego_10 0 Posted April 11, 2011 Author Report Share Posted April 11, 2011 Boas, Mais uma questao, tenho a minha datagrid colorida, tenho maneira de passar para o excel as cores da datagrid? Cumprimentos a todos! Link to post Share on other sites
diego_10 0 Posted April 11, 2011 Author Report Share Posted April 11, 2011 Alguma sugestao? Cumprimentos a todos! Link to post Share on other sites
Caça 17 Posted April 11, 2011 Report Share Posted April 11, 2011 Vê isto Pedro Martins Não respondo a duvidas por PM Link to post Share on other sites
jpaulino 90 Posted April 11, 2011 Report Share Posted April 11, 2011 Vê isto Concordo Diego tens de procurar primeiro ... o máximo que te podem mostrar são links, que podes encontrar também. Link to post Share on other sites
diego_10 0 Posted April 11, 2011 Author Report Share Posted April 11, 2011 Boas, Pois Jpaulinho eu sei, mas ca onde trabalho muitos dos sites onde posso encontrar essa informaçao não consigo ter acesso, dai fazer a pergunta no forum. Mas obrigado na mesma, quando chegar a casa irei ver o link! Cumprimentos a todos! Link to post Share on other sites
jpaulino 90 Posted April 11, 2011 Report Share Posted April 11, 2011 Pois Jpaulinho eu sei, mas ca onde trabalho muitos dos sites onde posso encontrar essa informaçao não consigo ter acesso, dai fazer a pergunta no forum. A questão não é perguntar, mas sim procurar primeiro antes de perguntar. Enquanto estás à espera que alguém responda a tua questão, com uma pesquisa no google, bing, sapo, etc, consegues encontrar vários exemplos. Depois, se tiveres dúvidas em implementar ou se tiveres erros, aí sim, deves colocar a questão Link to post Share on other sites
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now