obamaself Posted February 29, 2012 Report Share Posted February 29, 2012 A minha aplicação funciona perfeitamente em SO de 32 bits. mas quando passo para um de 64 bits a datagridview não aparece e dá este erro: http://img513.imageshack.us/img513/3184/erroon.png Link to comment Share on other sites More sharing options...
Caça Posted February 29, 2012 Report Share Posted February 29, 2012 É uma DataGridView normal? Tens a .NET framework instalada? Tenta compilar só para x64. Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
obamaself Posted February 29, 2012 Author Report Share Posted February 29, 2012 compilar como assim? eles usam a solução da aplicação, que se encontra num servidor Link to comment Share on other sites More sharing options...
Caça Posted February 29, 2012 Report Share Posted February 29, 2012 Cria uma nova configuração da solução para x64 e compila novamente. Vai a uma máquina com x64 e testa. Mas duvido se seja disto, uma vez que o que funciona em x86 normalmente funciona em x64, ao contrario é que não. Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
obamaself Posted February 29, 2012 Author Report Share Posted February 29, 2012 o meu é de 32 bits. e só a datagridview é que dá erro.. como e que faço isso? Link to comment Share on other sites More sharing options...
Caça Posted February 29, 2012 Report Share Posted February 29, 2012 Mas já viste qual é o motivo do erro? Estás a utilizar alguma referencia externa nesse formulário? Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
obamaself Posted February 29, 2012 Author Report Share Posted February 29, 2012 estou a importar isto : Imports Microsoft.Office.Interop Imports System.Threading.Thread Imports System.Globalization Imports System.Data Imports System.Data.SqlClient neste formulário a única coisa que faço de especial é exportar a data para excel. as referências que uso são: microsoft.office.interop.excel system system.core system.data system.drawing system.windows.forms system.windows.forms.datavisualization system.xml system.xml.linq Link to comment Share on other sites More sharing options...
Caça Posted February 29, 2012 Report Share Posted February 29, 2012 Ora, o problema de certeza que está ai... Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
obamaself Posted February 29, 2012 Author Report Share Posted February 29, 2012 como é que eu faço então para dar em 64 bits? Link to comment Share on other sites More sharing options...
Caça Posted February 29, 2012 Report Share Posted February 29, 2012 O problema não deve estár ai, mas sim no office, como é que estás a exportar? Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
obamaself Posted February 29, 2012 Author Report Share Posted February 29, 2012 http://www.jorgepaulino.com/2008/05/vbnet-exportar-datagridview-para-excel.html Link to comment Share on other sites More sharing options...
Caça Posted February 29, 2012 Report Share Posted February 29, 2012 A máquina tem o office instalado? Mostra o código todo desse form. Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
obamaself Posted February 29, 2012 Author Report Share Posted February 29, 2012 deste form são 1600 linhas. eu envio o código que estou a usar para exportar: Public Sub ExportToExcel(ByVal dgvName As DataGridView, ByVal [option] As xlsOption, Optional ByVal fileName As String = "Doc1") 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 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 'Mudar a cor das células With objExcelSheet.Cells(dgvRowIndex, dgvCellIndex).interior If cell.Style.BackColor = Color.Orange Then .Color = Color.Orange ElseIf cell.Style.BackColor = Color.Tomato Then .Color = Color.Red Else .color = Color.White End If End With dgvCellIndex += 1 Next dgvRowIndex += 1 Next objExcelSheet.Columns.AutoFit() 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 GC.Collect() GC.WaitForPendingFinalizers() GC.Collect() GC.WaitForPendingFinalizers() End Try End Sub a única coisa que eu pús diferente do que mostra no site é a parte da cor Link to comment Share on other sites More sharing options...
Caça Posted February 29, 2012 Report Share Posted February 29, 2012 E no load tens alguma coisa? Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
obamaself Posted February 29, 2012 Author Report Share Posted February 29, 2012 não, não tenho nada de especial. Carrego a datagridview, formato o nome das colunas.. Link to comment Share on other sites More sharing options...
Caça Posted February 29, 2012 Report Share Posted February 29, 2012 Ok, mas o problema pode estar ai e para te ajudar-mos temos de saber o porquê. Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
obamaself Posted February 29, 2012 Author Report Share Posted February 29, 2012 'Formatar o form Me.Width = largura Me.Height = altura dg.Width = Me.Width - 20 label_maximo_minimo.Location = New Point(label_maximo_minimo.Location.X, dg.Location.Y + dg.Height + 20) lblaprovador.Location = New Point(lblaprovador.Location.X, dg.Location.Y + dg.Height + 20) Actualizar.Location = New Point(Me.Width - 250, dg.Location.Y + dg.Height + 20) Button2.Location = New Point(Me.Width - 150, dg.Location.Y + dg.Height + 20) Actualizar.Visible = False ComboBox1.Items.Add("Ano") ComboBox1.Items.Add("Período") ComboBox1.Items.Add("Actual") ComboBox1.SelectedIndex = 2 'Carregar a datagridview. De um sub para o outro só muda a ordem das colunas If user.nome_grupo <> "Informática" Then index = 10 Carregar_datagrid_view_load_LABORATORIO() Else index = 16 Carregar_datagrid_view_load() End If 'Modificar_Colunas dg.Columns("Operacao").Width = 50 dg.Columns("Operacao").HeaderText = "Op." dg.Columns("cod_relatorio").Width = 65 dg.Columns("AC").Width = 30 dg.Columns("Lote").Width = 40 dg.Columns("Pos").Width = 40 dg.Columns("Cor2").Width = 40 dg.Columns("decisao").HeaderText = "Decisão lab." dg.Columns("decisao").Width = 90 dg.Columns("nr_ficha").HeaderText = "Ficha" dg.Columns("edicao").HeaderText = "Ed." 'Colunas congeladas For i As Integer = 0 To index dg.Columns(i).Frozen = True Next 'Aqui põe ou não a datagridview em readonly Dim g As Grupo = GrupoBD.Procurar_Grupo(user.nome_grupo) If g.manutencao_ensaios = False Then dg.ReadOnly = True End If dg.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize For Each coluna As DataGridViewColumn In dg.Columns If coluna.Index > index Then coluna.AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader End If Next isto é o que tenho no load. a carregar a datagridview: Dim DT As New DataTable DT = New DataTable("consultas") DT.Columns.Add("cod_relatorio") DT.Columns.Add("ano") DT.Columns.Add("mes") DT.Columns.Add("dia") DT.Columns.Add("nr_ficha") DT.Columns.Add("edicao") Dim lista_d As New List(Of Colunas) lista_d = Colunas_BD.Filtro For Each coluna As Colunas In lista_d DT.Columns.Add(coluna.nome) Next DT.Columns.Add("Obs") Dim lista_produtos As New List(Of Ensaio) lista_produtos = Ensaios_BD.Qwery_Introduzido(" select top 200 ensaios.* from ensaios order by cast(data_aprovacao as datetime )DESC ", maskdata1.Text, mskdata2.Text) For Each registo As Ensaio In lista_produtos Dim novalinha As DataRow = DT.NewRow novalinha("cod_relatorio") = registo.cod_relatorio novalinha("ano") = registo.data.Year novalinha("mes") = registo.data.Month novalinha("dia") = registo.data.Day 'Procurar Ficha Técnica Dim f As Ensaios_fichas = Ensaios_Fichas_BD.procurar_ensaio_ficha(registo.cod_relatorio) novalinha("nr_ficha") = f.nr_ficha novalinha("edicao") = f.nr_edicao Dim ensaios_col As List(Of Ensaios_Colunas) = Ensaios_Colunas_BD.Lista_De_Ensaios_Colunas(registo.cod_relatorio) For Each coluna_ensaio As Ensaios_Colunas In ensaios_col Dim cooluna As Colunas = Colunas_BD.Procurar_Por_Codigo(coluna_ensaio.codigo) If cooluna.codigo <> "" Then novalinha(cooluna.nome) = coluna_ensaio.valor End If Next DT.Rows.Add(novalinha) Next dg.DataSource = DT Link to comment Share on other sites More sharing options...
ricasss Posted February 29, 2012 Report Share Posted February 29, 2012 Na máquina em que dá o erro tens o office instalado? Qual é a versão do Interop que usas? Experimenta ir as propriedades do teu projecto e onde diz references procura la na lista por Microsoft.Office.Interop.Excel ou Microsoft.Office.Interop e ve se no Copy Local esta a False se tiver passa para True e experimenta outra vez... Link to comment Share on other sites More sharing options...
obamaself Posted February 29, 2012 Author Report Share Posted February 29, 2012 http://img256.imageshack.us/img256/3904/erro1if.jpg já testei e deu o mesmo erro Link to comment Share on other sites More sharing options...
programadorvb6 Posted March 6, 2012 Report Share Posted March 6, 2012 Olá Bom dia. Exprimenta fazeres assim (Isto em uma máquina de 64 Bits): 1º Verifica se na tua pasta obj, contém todas as bib [Ex : Interop.Microsoft.Office.Core.Dll | Interop.Microsoft.Office.Interop.Excel | Interop.VBIDE.Dll] . referênciadas, caso contrário Copiar para a pasta referida. 2º Vais ao Solution Explorer e nas referências deleta as Bib. (como mostra a figura em baixo) ; seguido de Gravar. http://img845.imageshack.us/img845/1179/errovf.png 3º Volta Novamente a adicionar as 3 Bib. em questão, seguido de Gravar. 4º Rebuil o teu projecto e faz correr a aplicação. Nota : Tens que ter estas 3 Bib. Referênciadas em teu projecto. Espero ter ajudado. Até+ Programadorvb6 ______________________________________________________________________________ Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé. Link to comment Share on other sites More sharing options...
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