ERRO DE FORMATACAO DE CAMPO EXCEL
Bom dia a todos,
estou com difuculdades para formatar um campo numérico no excel que estou exportando. Estou pegando as informações de um datagrid e quando o excel é exportado, o valor da coluna Contrato que é numérico esta saindo errado na planilha devido ao seu tamanho. Ex: No Grid está 350000038019 e na planilha sai 3,53E+11
Segue o fonte que estou utilizando para exportar o excel.
Agradeço desde já.
Public Class frmReclassificacaoHist
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
Try
[ô] Se foi seleccionada a opção exportar e não foi indicado nome do arquivo
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
objExcelSheet.Cells(1, dgvColumnIndex).Interior.ColorIndex = 6
dgvColumnIndex += 1
Next
[ô] Ciclo nas linhas/células
Dim dgvRowIndex As Integer = 2
For Each row As DataGridViewRow In dgvReclassificacaoHist.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([Ô]Arquivo 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
estou com difuculdades para formatar um campo numérico no excel que estou exportando. Estou pegando as informações de um datagrid e quando o excel é exportado, o valor da coluna Contrato que é numérico esta saindo errado na planilha devido ao seu tamanho. Ex: No Grid está 350000038019 e na planilha sai 3,53E+11
Segue o fonte que estou utilizando para exportar o excel.
Agradeço desde já.
Public Class frmReclassificacaoHist
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
Try
[ô] Se foi seleccionada a opção exportar e não foi indicado nome do arquivo
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
objExcelSheet.Cells(1, dgvColumnIndex).Interior.ColorIndex = 6
dgvColumnIndex += 1
Next
[ô] Ciclo nas linhas/células
Dim dgvRowIndex As Integer = 2
For Each row As DataGridViewRow In dgvReclassificacaoHist.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([Ô]Arquivo 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
Faça seu login para responder