EXPORTANDO INFORMACOES PARA EXCEL

JONATHANSTECKER 04/11/2011 11:59:54
#388452
Bom dia senhores,

Estou tendo uma enorme dor de cabeça com algo que deveria ser tão simples.
Preciso simplesmente exportar algumas informações de um DataGridView para uma planilha de Excel.
Atualmente faço dessa forma:
    Private Sub Exportar()

Dim oExcel As Object = CreateObject([Ô]excel.application[Ô])
Dim oWorkbook As Object = oExcel.Workbooks.Open([Ô]D:\PlanilhaBase.xls[Ô])
Dim oSheet As Object = Nothing
Dim oWS As Object = Nothing

[ô]Salva a PlanilhaBase em outro local
If Val(oExcel.Version) > 11 Then
oWorkbook.SaveAs([Ô]D:\Teste.xls[Ô], 56)
Else
oWorkbook.SaveAs([Ô]D:\Teste.xls[Ô])
End If

[ô]Exibe o aplicativo Excel
oExcel.Application.Visible = True

[ô]Exporto os dados
oSheet = oWorkbook.Sheets(1)
oSheet = oWorkbook.Sheets([Ô]Projetos[Ô]).Select()
oWS = oExcel.ActiveWorkbook.ActiveSheet
For Each Linha As DataGridViewRow In Me.dgvProjetos.Rows
Dim ContadorColuna As Integer = 1
For Each Celula As DataGridViewCell In Me.dgvProjetos.Rows(Linha.Index).Cells
With oSheet
oWS.Cells(Linha.Index + 2, ContadorColuna).Value = CStr(Celula.Value)
End With
ContadorColuna += 1
Next
Next

[ô]Ajusta a largura das colunas
oWS.Columns([Ô]A:AZ[Ô]).AutoFit()

End Sub

Bom, exporta certinho utilizando esse método no Excel 2003 em Português, agora utilizar o mesmo método no Excel 2003 em Inglês me gera um erro.

ERRO:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.Runtime.InteropServices.COMException (0x80028018): Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))
at Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet(Object o, Type objType, String name, Object[] args, String[] paramnames, Boolean[] CopyBack)
at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack)

Alguém já passou por isso ou faz ideia do porque isso pode estar ocorrendo?
Ou também se houver alguma outra forma para exportar esses dados para o Excel... Estou aberto para sugestões e mudanças.
MHDSERAFS 04/11/2011 13:24:58
#388463
Resposta escolhida
Jon...
eu uso assim para exportar para excel

Private Sub ExportarParaExcel2007()
Dim xlApp As Excel.Application = New Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet
Dim misValue As Object = System.Reflection.Missing.Value

xlWorkBook = xlApp.Workbooks.Add(misValue)
xlWorkSheet = xlWorkBook.Sheets([Ô]Plan1[Ô])
With xlWorkSheet
.Cells(1, 1) = [Ô]EMPRESA[Ô]
.Cells(1, 2) = [Ô]COLABORADOR[Ô]
.Cells(1, 3) = [Ô]DATA[Ô]
.Cells(1, 4) = [Ô]AVALIAÇÃO[Ô]
.Cells(1, 5) = [Ô]PESO[Ô]
.Cells(1, 6) = [Ô]ALTURA[Ô]
.Cells(1, 7) = [Ô]IMC[Ô]
.Cells(1, 8) = [Ô]RESULTADO DO IMC[Ô]
.Cells(1, 9) = [Ô]CINTURA[Ô]
.Cells(1, 10) = [Ô]QUADRIL[Ô]
.Cells(1, 11) = [Ô]ICQ[Ô]
.Cells(1, 12) = [Ô]RESULTADO DO ICQ[Ô]
.Cells(1, 13) = [Ô]C.A[Ô]
.Cells(1, 14) = [Ô]RESULTADO DO C.A[Ô]
.Cells(1, 15) = [Ô]PESO DESEJADO[Ô]
.Cells(1, 16) = [Ô]% GORDURA[Ô]
.Cells(1, 17) = [Ô]RESULTADO DA % GORDURA[Ô]
.Cells(1, 18) = [Ô]BICEPS[Ô]
.Cells(1, 19) = [Ô]TRICEPS[Ô]
.Cells(1, 20) = [Ô]SUPRA ILIACA[Ô]
.Cells(1, 21) = [Ô]SUBSCAPULAR[Ô]
.Cells(1, 22) = [Ô]% GORDURA DOBRAS[Ô]
.Cells(1, 23) = [Ô]OBSERVAÇÕES[Ô]
.Cells(1, 24) = [Ô]BRAÇO[Ô]
.Cells(1, 25) = [Ô]PULSO[Ô]
.Cells(1, 26) = [Ô]PONTUAÇÃO - DADOS CLINICOS[Ô]
.Cells(1, 27) = [Ô]PONTUAÇÃO - DADOS COMPORTAMENTAIS[Ô]
.Cells(1, 28) = [Ô]PONTUAÇÃO - DADOS DE CONSUMO[Ô]
.Cells(1, 29) = [Ô]PONTUAÇÃO - DADOS ANTROPOMéTRICOS[Ô]
.Cells(1, 30) = [Ô]PONTUAÇÃO TOTAL POR AVALIAÇÃO[Ô]
.Range([Ô]A1[Ô], [Ô]A1[Ô]).Font.Bold = True
.Range([Ô]B1[Ô], [Ô]B1[Ô]).Font.Bold = True
.Range([Ô]C1[Ô], [Ô]C1[Ô]).Font.Bold = True
.Range([Ô]D1[Ô], [Ô]D1[Ô]).Font.Bold = True
.Range([Ô]E1[Ô], [Ô]E1[Ô]).Font.Bold = True
.Range([Ô]F1[Ô], [Ô]F1[Ô]).Font.Bold = True
.Range([Ô]G1[Ô], [Ô]G1[Ô]).Font.Bold = True
.Range([Ô]H1[Ô], [Ô]H1[Ô]).Font.Bold = True
.Range([Ô]I1[Ô], [Ô]I1[Ô]).Font.Bold = True
.Range([Ô]J1[Ô], [Ô]J1[Ô]).Font.Bold = True
.Range([Ô]K1[Ô], [Ô]K1[Ô]).Font.Bold = True
.Range([Ô]L1[Ô], [Ô]L1[Ô]).Font.Bold = True
.Range([Ô]M1[Ô], [Ô]M1[Ô]).Font.Bold = True
.Range([Ô]N1[Ô], [Ô]N1[Ô]).Font.Bold = True
.Range([Ô]O1[Ô], [Ô]O1[Ô]).Font.Bold = True
.Range([Ô]P1[Ô], [Ô]P1[Ô]).Font.Bold = True
.Range([Ô]Q1[Ô], [Ô]Q1[Ô]).Font.Bold = True
.Range([Ô]R1[Ô], [Ô]R1[Ô]).Font.Bold = True
.Range([Ô]S1[Ô], [Ô]S1[Ô]).Font.Bold = True
.Range([Ô]T1[Ô], [Ô]T1[Ô]).Font.Bold = True
.Range([Ô]U1[Ô], [Ô]U1[Ô]).Font.Bold = True
.Range([Ô]V1[Ô], [Ô]V1[Ô]).Font.Bold = True
.Range([Ô]W1[Ô], [Ô]W1[Ô]).Font.Bold = True
.Range([Ô]X1[Ô], [Ô]X1[Ô]).Font.Bold = True
.Range([Ô]Y1[Ô], [Ô]Y1[Ô]).Font.Bold = True
.Range([Ô]Z1[Ô], [Ô]Z1[Ô]).Font.Bold = True
.Range([Ô]AA1[Ô], [Ô]AA1[Ô]).Font.Bold = True
.Range([Ô]AB1[Ô], [Ô]AB1[Ô]).Font.Bold = True
.Range([Ô]AC1[Ô], [Ô]AC1[Ô]).Font.Bold = True
.Range([Ô]AD1[Ô], [Ô]AD1[Ô]).Font.Bold = True
End With

For linha As Integer = 0 To DataGridView1.Rows.Count - 1
For coluna As Integer = 0 To DataGridView1.Columns.Count - 1
xlWorkSheet.Cells(linha + 2, coluna + 1) = DataGridView1.Rows(linha).Cells(coluna).Value
Next
Next

xlWorkSheet.SaveAs(Application.StartupPath & [Ô]\Colaboradores.xls[Ô])
xlWorkBook.Close()
xlApp.Quit()

MessageBox.Show([Ô]Arquivo [Ô][Ô]Colaboradores.xls[Ô][Ô] criado com sucesso![Ô], [Ô]DietNet[Ô])
JONATHANSTECKER 04/11/2011 13:29:30
#388464
Dessa forma funciona para todas as versões? Ou apenas para o 2007 mesmo?
JONATHANSTECKER 07/11/2011 16:25:18
#388640
RESOLVIDO!

O problema estava ocorrendo porque existe incompatibilidade entre algumas versões de Excel vs Sistema Operacional.
Resolvi o problema alterando o tipo / localização para inglês.
Assim independente da versão do Excel que for utilizado para exportar, usará o tipo Default definido por mim.

CurrentThread.CurrentCulture = New CultureInfo([Ô]en-US[Ô])



Agradeço a todos pela ajuda, em específico ao Mario Sampaio ([txt-color=#0000f0]MHDSERAFS[/txt-color]), que me deu uma grande força pelo MSN.
Tópico encerrado , respostas não são mais permitidas