crax15 Posted February 4, 2014 at 12:11 AM Report #543839 Posted February 4, 2014 at 12:11 AM Boa noite, estou com um pequeno problema, nao Visual Studio 2013 nao me é reconhecido o #Imports Microsoft.Office.Interop.Excel será por ser o 2013 ou por ter a verçao do Office 2013?? Pedro'O
nelsonr Posted February 4, 2014 at 09:40 AM Report #543859 Posted February 4, 2014 at 09:40 AM Tens de adicionar referencia no projecto. Project / Add Reference / COM / Microsoft Excel 15.0 Object Library
crax15 Posted February 4, 2014 at 12:20 PM Author Report #543879 Posted February 4, 2014 at 12:20 PM Obrigado resolveu, mas agora tenho este problema nas seguintes variaveis Dim objExcelApp As New Excel.Application Dim objExcelBook As Excel.Workbook Dim objExcelSheet As Excel.Worksheet Nao reconhece o Excel.Application nem o Workbook nem o Worksheet Pedro'O
nelsonr Posted February 4, 2014 at 12:35 PM Report #543883 Posted February 4, 2014 at 12:35 PM Adiciona isto no inicio Imports Microsoft.Office.Interop
crax15 Posted February 4, 2014 at 12:49 PM Author Report #543886 Posted February 4, 2014 at 12:49 PM Eu tenho isto Imports Microsoft.Office.Interop Imports Microsoft.Office.Interop.Excel Imports System.Threading.Thread Imports System.Globalization Public Class Form1 Enum xlsOption xlsSaveAs xlsOpen End Enum ''' <summary> ''' Exporta a informação de uma DataGridView para o Microsoft Excel ''' </summary> ''' <param name="dgvName">Nome da DataGridView </param> ''' <param name="option">SaveAs ou Open</param> ''' <param name="fileName">Nome completo do ficheiro</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 E mesmo assim continua igual Pedro'O
crax15 Posted February 4, 2014 at 06:14 PM Author Report #543943 Posted February 4, 2014 at 06:14 PM Dim objExcelApp As New Excel.Application Dim objExcelBook As Excel.Workbook Dim objExcelSheet As Excel.Worksheet Bem eu tirando o Excel. de todas as variaveis resolveu o probelma, mas nao haverá conflitos ou assim?? Ja agora outra duvida quando vou gravar o ficheiro ele dá-me o seguinte erro... O Codigo que estou a testar foi publicado nesta pagina e não é meu, mas estou a tentar fazer projecto onde vou necessitar desta ferramenta, la publiquei uma pergunta mas nao recebi resposta ainda... espero nao estar a infringir nada... http://www.jorgepaulino.com/2008/05/vbnet-exportar-datagridview-para-excel.html O codigo que eu tenho é o seguinte: Imports Microsoft.Office.Interop.Excel Imports System.Threading.Thread Imports System.Globalization Public Class Form1 Enum xlsOption xlsSaveAs xlsOpen End Enum ''' <summary> ''' Exporta a informação de uma DataGridView para o Microsoft Excel ''' </summary> ''' <param name="dgvName">Nome da DataGridView </param> ''' <param name="option">SaveAs ou Open</param> ''' <param name="fileName">Nome completo do ficheiro</param> Public Sub ExportToExcel(ByVal dgvName As DataGridView, ByVal [option] As xlsOption, Optional ByVal fileName As String = "") Dim objExcelApp As New Application Dim objExcelBook As Workbook Dim objExcelSheet As 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), 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 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 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 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load liga() ligacao.Open() sqltext = "SELECT * From Fundos" adaptador = New OleDb.OleDbDataAdapter(sqltext, ligacao) adaptador.Fill(dados, "Data") DataGridView1.DataSource = dados.Tables("Data") ligacao.Close() End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' Exporta e abre o Microsoft Excel ExportToExcel(Me.DataGridView1, xlsOption.xlsOpen) End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click ' Exporta e grava o ficheiro na localização indicada ExportToExcel(Me.DataGridView1, xlsOption.xlsSaveAs, "C:\Users\Pedro\Excel\meuFicheiroExcel.xls") End Sub End Class E tenho os imports da base de dados e algumas variaveis como globais Pedro'O
nelsonr Posted February 4, 2014 at 07:04 PM Report #543947 Posted February 4, 2014 at 07:04 PM Esse site é de um membro do Staff aqui do forum. Não chegaste a dizer qual é o erro
crax15 Posted February 4, 2014 at 07:14 PM Author Report #543948 Posted February 4, 2014 at 07:14 PM Nao mostrou a imagem mas é a MSGbox MessageBox.Show("Erro não identificado. Mensagem original:" & vbNewLine + ex.Message) Pedro'O
nelsonr Posted February 4, 2014 at 10:12 PM Report #543985 Posted February 4, 2014 at 10:12 PM Mas qual é a mensagem de erro?
crax15 Posted February 4, 2014 at 10:39 PM Author Report #543994 Posted February 4, 2014 at 10:39 PM Microsoft Excel nao concegue aceder ao Ficheiro "C:\Users\Pedro\Excel\1F50C0000" Nome do ficheiro ou caminho nao Existe Ficheiro esta a ser utilizado por outro programa Livro que esta a tentar guardar tem o mesmo nome que um livro que esta aberto neste momento É isto que me diz... Pedro'O
nelsonr Posted February 4, 2014 at 10:58 PM Report #543997 Posted February 4, 2014 at 10:58 PM E o caminho onde estás a querer gravar existe? Qual é o conteudo da variavel fileName ?
crax15 Posted February 4, 2014 at 11:44 PM Author Report #544002 Posted February 4, 2014 at 11:44 PM Sim o caminho existe, eu até criei a pasta e copiei o caminho para lá. Filename como assim? ele nem me chega a a perguntar o Filename nem nada, ele faz o Try mas passa logo para a mensagem de erro Pedro'O
crax15 Posted February 5, 2014 at 12:20 AM Author Report #544008 Posted February 5, 2014 at 12:20 AM Ja percebi onde era o problema, estava a esquecer-me de passar o valor do file name para o button e guardar o nome do documento. Muito obrigado pela ajuda até agora! já agora uma questao, é possivel formatar as celulas e colocar as bordas numa determinada celula apartir daqui do VB? Se sim em que parte do codigo seria... é que eu ja concegui unir celulas e aumentar o tamanho da letra, mas alinhar o texto e colocar bordas é que nao... Contudo obrigado Pedro'O
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