Passei o dia todo pesquisando na net, mas nada me adiantou. Espero que possam em ajudar. Tenho uma aplicação que possui relatórios. Os relatórios podem ser exportados via Excel ou Crystal. Quando escolhido Excel, a rotina de exportação chama uma classe que criei que não estava dando problema algum... Contudo, de ontem pra hoje, começou a dar uns "paus".
Os erros que ocorrem são:
- Exception from HRESULT: 0x800A0E3C
- A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll
Não faço idéia do que seja! Cada site passa uma informação. Alguém já teve esse erro e foi resolvido? Acho que não é erro no código, pois o delimitei o SELECT que traz os dados, não incluindo o registro que apresentou erro e funcionou. Ainda assim, com outros filtros, funciona normalmente. ****** UPDATE: Realizei um teste removendo os dados de algumas linhas e mesmo assim o erro persistiu ******
Lembrando que é uma rotina genérica. Abaixo segue o código:
Pergunta
Xistyle
Pessoal, boa noite!
Passei o dia todo pesquisando na net, mas nada me adiantou. Espero que possam em ajudar. Tenho uma aplicação que possui relatórios. Os relatórios podem ser exportados via Excel ou Crystal. Quando escolhido Excel, a rotina de exportação chama uma classe que criei que não estava dando problema algum... Contudo, de ontem pra hoje, começou a dar uns "paus".
Os erros que ocorrem são:
- Exception from HRESULT: 0x800A0E3C
- A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll
Não faço idéia do que seja! Cada site passa uma informação. Alguém já teve esse erro e foi resolvido? Acho que não é erro no código, pois o delimitei o SELECT que traz os dados, não incluindo o registro que apresentou erro e funcionou. Ainda assim, com outros filtros, funciona normalmente. ****** UPDATE: Realizei um teste removendo os dados de algumas linhas e mesmo assim o erro persistiu ******
Lembrando que é uma rotina genérica. Abaixo segue o código:
Imports Microsoft.Office.Interop Imports System.Runtime.InteropServices Public Class clsExcel '# Rotina que recebe o cabeçalho e exporta os dados para o Excel Public Sub gfcnExportarExcel(ByRef dtbDados As System.Data.DataTable, ByVal lstrNomeArquivo As String, Optional ByVal lintProcessoExistente As Integer = 0) Dim lobjExcel As New Excel.Application() Dim lbokPasta As Excel.Workbook Dim lshtPlanilha As New Excel.Worksheet Dim lcdlArquivo As New SaveFileDialog Dim lintContador As Integer Dim lintSomaProcesso As Integer = 0 Dim lintIDProcesso As Integer = 0 Dim lstrExtensao As String Dim lstrUltimaColuna As String = "" Dim lstrUltimaLinhaExcel As String Dim lproExcel As Process = Nothing Try '# Verifica se o Excel está instalado na máquina If lobjExcel Is Nothing Then MessageBox.Show("O Excel não foi encontrado neste computador. Verifique se está corretamente instalado!", "DIG", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If '# Cria a pasta de trabalho lbokPasta = lobjExcel.Workbooks.Add '# Verifica se o documento possui mais de uma planilha (que não seja a que estamos exportando) '# e as exclui. If lbokPasta.Worksheets.Count > 1 Then For lintPlanilha As Integer = 1 To 3 If lintPlanilha = 3 Then '# Cria a planilha e atribui o nome lshtPlanilha = lbokPasta.Worksheets.Add() lbokPasta.Worksheets.Item(1).Name = "Relatório" lbokPasta.Sheets(2).Delete() Else lbokPasta.Sheets(lintPlanilha).Delete() End If Next End If lintContador = 0 '# Pega a extensão do arquivo e última linha do Excel, dependendo da versão lstrExtensao = Microsoft.VisualBasic.Right(lstrNomeArquivo, 4) lstrUltimaLinhaExcel = IIf(UCase(lstrExtensao) = ".XLS", "65536", "1048576") '# Formata o cabeçalho For Each colCabecalho As DataColumn In dtbDados.Columns '# Realiza o teste para importar apenas colunas que não contenham as IDS If Mid(colCabecalho.Caption, 1, 2) <> "ID" Or colCabecalho.Caption = "ID_PUB" Then lintContador += 1 With lshtPlanilha .Cells(1, lintContador) = colCabecalho.Caption .Cells(1, lintContador).Font.Bold = True .Cells(1, lintContador).Font.Color = RGB(255, 255, 255) 'Branco .Cells(1, lintContador).Interior.ColorIndex = 5 'Azul '# Recebe a última coluna da planilha e alinha o texto do cabeçalho no centro lstrUltimaColuna = Replace(lshtPlanilha.Cells(1, lintContador).Address(False, False), lshtPlanilha.Cells(1, lintContador).Row, "") .Range(lstrUltimaColuna + "1").HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter End With End If Next lintContador = 0 '# Passa os valores do DataTable para as células do Excel '# Preenche a primera coluna For Each lcolColuna As DataColumn In dtbDados.Columns '# Verifica se a coluna que irá ser preenchida não é uma coluna de ID If Mid(lcolColuna.Caption, 1, 2) <> "ID" Or lcolColuna.Caption = "ID_PUB" Then '# Preenche as linhas For llngLinha As Integer = 0 To (dtbDados.Rows.Count - 1) '# Troca os ENTERs do campo texto por espaços If UCase(lcolColuna.Caption) = "TEXTO" Then lshtPlanilha.Cells((llngLinha + 2), (lcolColuna.Ordinal - lintContador) + 1) = lfcnTrocaCaracteres(CType(dtbDados.Rows(llngLinha).ItemArray(lcolColuna.Ordinal), String)) Else lshtPlanilha.Cells((llngLinha + 2), (lcolColuna.Ordinal - lintContador) + 1) = dtbDados.Rows(llngLinha).ItemArray(lcolColuna.Ordinal) End If System.Windows.Forms.Application.DoEvents() Debug.Print(dtbDados.Rows(llngLinha).ItemArray(0).ToString + " - " + dtbDados.Rows(llngLinha).ItemArray(lcolColuna.Ordinal).ToString) Next lintContador -= 1 End If System.Windows.Forms.Application.DoEvents() lintContador += 1 Next '# Formata a fonte lshtPlanilha.Range("A1:" + lstrUltimaColuna + (Convert.ToString(dtbDados.Rows.Count + 1))).Font.Name = "Calibri" '# Limita a altura e largura de campos com quantidade de caracteres muito grande lshtPlanilha.Rows.RowHeight = 14.25 '# Configura o estilo da borda e tamanho lshtPlanilha.Range("A1:" + lstrUltimaColuna + (Convert.ToString(dtbDados.Rows.Count + 1))).Borders.LineStyle = Excel.XlLineStyle.xlContinuous lshtPlanilha.Range("A1:" + lstrUltimaColuna + (Convert.ToString(dtbDados.Rows.Count + 1))).Borders(Excel.XlBordersIndex.xlEdgeBottom).Weight = 4 lshtPlanilha.Range("A1:" + lstrUltimaColuna + (Convert.ToString(dtbDados.Rows.Count + 1))).Borders(Excel.XlBordersIndex.xlEdgeLeft).Weight = 4 lshtPlanilha.Range("A1:" + lstrUltimaColuna + (Convert.ToString(dtbDados.Rows.Count + 1))).Borders(Excel.XlBordersIndex.xlEdgeRight).Weight = 4 lshtPlanilha.Range("A1:" + lstrUltimaColuna + (Convert.ToString(dtbDados.Rows.Count + 1))).Borders(Excel.XlBordersIndex.xlEdgeTop).Weight = 4 '# Salva o arquivo com o nome especificado no SaveFileDialog que chamou a rotina de exportação lbokPasta.SaveAs(lstrNomeArquivo) MessageBox.Show("Relatório exportado com sucesso!", "DIG", MessageBoxButtons.OK, MessageBoxIcon.Information) Marshal.FinalReleaseComObject(lshtPlanilha) lbokPasta.Close(SaveChanges:=False) Marshal.FinalReleaseComObject(lbokPasta) lobjExcel.Quit() Marshal.FinalReleaseComObject(lobjExcel) lobjExcel = Nothing lbokPasta = Nothing lshtPlanilha = Nothing Catch ex As Exception MessageBox.Show("Ocorreu um erro durante o processo de exportação." + vbCrLf + _ "Erro:" + vbCrLf + _ ex.Message, "DIG", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally '# Faz a soma de todos os Excel's abertos, incluindo o relatório For Each lproProcesso As Process In Process.GetProcessesByName("EXCEL") lintSomaProcesso += lproProcesso.Id Next lproProcesso lintIDProcesso = lintSomaProcesso - lintProcessoExistente If lintIDProcesso <> 0 Then lproExcel = Process.GetProcessById(lintIDProcesso) If lproExcel IsNot Nothing Then lproExcel.Kill() End If End Try End Sub Private Function lfcnTrocaCaracteres(ByVal lstrValorCampo As String) As String Dim lstrCaracterEspecial(97) As String Dim lintContador As Integer lstrCaracterEspecial(0) = Chr(9) 'Tab lstrCaracterEspecial(1) = Chr(11) 'Tab lstrCaracterEspecial(2) = Chr(13) 'Enter lstrCaracterEspecial(3) = Chr(127) 'DEL lstrCaracterEspecial(4) = Chr(128) '€ lstrCaracterEspecial(5) = Chr(129) ' lstrCaracterEspecial(6) = Chr(131) 'ƒ lstrCaracterEspecial(7) = Chr(132) '„ lstrCaracterEspecial(8) = Chr(133) '… lstrCaracterEspecial(9) = Chr(134) '† lstrCaracterEspecial(10) = Chr(135) '‡ lstrCaracterEspecial(11) = Chr(136) 'ˆ lstrCaracterEspecial(12) = Chr(137) '‰ lstrCaracterEspecial(13) = Chr(138) 'Š lstrCaracterEspecial(14) = Chr(139) '‹ lstrCaracterEspecial(15) = Chr(140) 'Œ lstrCaracterEspecial(16) = Chr(141) ' lstrCaracterEspecial(17) = Chr(142) 'Ž lstrCaracterEspecial(18) = Chr(143) ' lstrCaracterEspecial(19) = Chr(144) ' lstrCaracterEspecial(20) = Chr(145) '‘ lstrCaracterEspecial(21) = Chr(147) '“ lstrCaracterEspecial(22) = Chr(148) '” lstrCaracterEspecial(23) = Chr(149) '• lstrCaracterEspecial(24) = Chr(152) '˜ lstrCaracterEspecial(25) = Chr(153) '™ lstrCaracterEspecial(26) = Chr(154) 'š lstrCaracterEspecial(27) = Chr(155) '› lstrCaracterEspecial(28) = Chr(156) 'œ lstrCaracterEspecial(29) = Chr(157) ' lstrCaracterEspecial(30) = Chr(158) 'ž lstrCaracterEspecial(31) = Chr(159) 'Ÿ lstrCaracterEspecial(32) = Chr(161) '¡ lstrCaracterEspecial(33) = Chr(162) '¢ lstrCaracterEspecial(34) = Chr(163) '£ lstrCaracterEspecial(35) = Chr(164) '¤ lstrCaracterEspecial(36) = Chr(165) '¥ lstrCaracterEspecial(37) = Chr(166) '¦ lstrCaracterEspecial(38) = Chr(167) '§ lstrCaracterEspecial(39) = Chr(168) '¨ lstrCaracterEspecial(40) = Chr(169) '© lstrCaracterEspecial(41) = Chr(171) '« lstrCaracterEspecial(42) = Chr(172) '¬ lstrCaracterEspecial(43) = Chr(174) '® lstrCaracterEspecial(44) = Chr(175) '¯ lstrCaracterEspecial(45) = Chr(177) '± lstrCaracterEspecial(46) = Chr(180) '´ lstrCaracterEspecial(47) = Chr(181) 'µ lstrCaracterEspecial(48) = Chr(182) '¶ lstrCaracterEspecial(49) = Chr(183) '· lstrCaracterEspecial(50) = Chr(184) '¸ lstrCaracterEspecial(51) = Chr(187) '» lstrCaracterEspecial(52) = Chr(188) '¼ lstrCaracterEspecial(53) = Chr(189) '½ lstrCaracterEspecial(54) = Chr(190) '¾ lstrCaracterEspecial(55) = Chr(191) '¿ lstrCaracterEspecial(56) = Chr(198) 'Æ lstrCaracterEspecial(57) = Chr(208) 'Ð lstrCaracterEspecial(58) = Chr(215) '× lstrCaracterEspecial(59) = Chr(216) 'Ø lstrCaracterEspecial(60) = Chr(221) 'Ý lstrCaracterEspecial(61) = Chr(222) 'Þ lstrCaracterEspecial(62) = Chr(223) 'ß lstrCaracterEspecial(63) = Chr(230) 'æ lstrCaracterEspecial(64) = Chr(248) 'ø lstrCaracterEspecial(65) = Chr(253) 'ý lstrCaracterEspecial(66) = Chr(254) 'þ lstrCaracterEspecial(67) = Chr(255) 'ÿ lstrCaracterEspecial(68) = Chr(1) ' lstrCaracterEspecial(69) = Chr(2) ' lstrCaracterEspecial(70) = Chr(3) ' lstrCaracterEspecial(71) = Chr(4) ' lstrCaracterEspecial(72) = Chr(5) ' lstrCaracterEspecial(73) = Chr(6) ' lstrCaracterEspecial(74) = Chr(7) ' lstrCaracterEspecial(75) = Chr(8) ' lstrCaracterEspecial(76) = Chr(10) ' lstrCaracterEspecial(77) = Chr(11) ' lstrCaracterEspecial(78) = Chr(12) ' lstrCaracterEspecial(79) = Chr(14) ' lstrCaracterEspecial(80) = Chr(15) ' lstrCaracterEspecial(81) = Chr(16) ' lstrCaracterEspecial(82) = Chr(17) ' lstrCaracterEspecial(83) = Chr(18) ' lstrCaracterEspecial(84) = Chr(19) ' lstrCaracterEspecial(85) = Chr(20) ' lstrCaracterEspecial(86) = Chr(21) ' lstrCaracterEspecial(87) = Chr(22) ' lstrCaracterEspecial(88) = Chr(23) ' lstrCaracterEspecial(89) = Chr(24) ' lstrCaracterEspecial(90) = Chr(25) ' lstrCaracterEspecial(91) = Chr(26) ' lstrCaracterEspecial(92) = Chr(27) ' lstrCaracterEspecial(93) = Chr(28) ' lstrCaracterEspecial(94) = Chr(29) ' lstrCaracterEspecial(95) = Chr(30) ' lstrCaracterEspecial(96) = Chr(31) ' lstrCaracterEspecial(97) = "#" lfcnTrocaCaracteres = "" For lintContador = 0 To UBound(lstrCaracterEspecial) If InStr(1, lstrValorCampo, lstrCaracterEspecial(lintContador)) > 0 Then If lintContador = 23 Or lintContador = 49 Then '• ou · lstrValorCampo = Replace(lstrValorCampo, lstrCaracterEspecial(lintContador), "*") Else lstrValorCampo = Replace(lstrValorCampo, lstrCaracterEspecial(lintContador), " ") End If End If Next lfcnTrocaCaracteres = lstrValorCampo End Function End ClassEditado por XistyleLink para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.