Underc0de

Programación General => Visual Basic => Códigos Fuentes => Mensaje iniciado por: ANTRAX en Julio 26, 2010, 12:18:37 PM

Título: Como Exportar de Flexgrid a Excel
Publicado por: ANTRAX en Julio 26, 2010, 12:18:37 PM
como exportar un arhivo a excel, usando un MsFlexgrid O MsHflexgrid, bueno consegui este codigo y uso el MSHFlexGrid, pero lo pueden cambiar a MSFlexGrid, sin ningun problema..

Código (vb) [Seleccionar]
Sub CopyToExcel(InFlexGrid As MSHFlexGrid, Nome$, _
   ByVal TextoAdicional$)
  Dim R%, c%, Buf$, LstRow%, LstCol%
  Dim FormatMoney As Boolean
  Dim MyExcel As Excel.Application
  Dim wbExcel As Excel.Workbook
  Dim shExcel As Excel.Worksheet
  On Error Resume Next

  Set MyExcel = GetObject(, "Excel.Application")
  If Err.Number <> 0 Then
Set MyExcel = CreateObject("Excel.Application")
  End If
  Set wbExcel = MyExcel.Workbooks.Add
  Set shExcel = wbExcel.Worksheets.Add
  shExcel.Name = Nome$
  shExcel.Activate
  LstCol% = 0
  For c% = 0 To InFlexGrid.Cols - 1
InFlexGrid.Col = c%
LstRow% = 0
shExcel.Columns(Chr(Asc("A") + c%)).ColumnWidth = InFlexGrid.ColWidth(c%) / 72
For R% = 0 To InFlexGrid.Rows - 1
  InFlexGrid.Row = R%
  Err.Clear
  Buf$ = InFlexGrid.TextMatrix(R%, c%)
  If Buf$ <> "" Then
FormatMoney = False
If InStr(Buf$, vbCrLf) Then
  Buf$ = StrTran(Buf$, vbCrLf, vbLf)
  Do While Right(Buf$, 1) = vbLf
Buf$ = Left(Buf$, Len(Buf$) - 1)
  Loop
  shExcel.Range(Chr(Asc("A") + c%)).WrapText = True
ElseIf Format(CDbl(Buf$), csFormatMoneyZero) = Buf$ Then
  If Err.Number = 0 Then
Buf$ = Str(CDbl(Buf$))
FormatMoney = True
  End If
End If
If Buf$ <> "" Then
  If InFlexGrid.MergeRow(R%) Then
For LstCol% = c% To 1 Step -1
  If InFlexGrid.TextMatrix(R%, LstCol% - 1) <> InFlexGrid.TextMatrix(R%, c%) Then
Exit For
  End If
Next
If LstCol% <> c% Then
  shExcel.Range(Chr(Asc("A") + LstCol%) & (R% + 1), _
   Chr(Asc("A") + c%) & (R% + 1)).MergeCells = True
  shExcel.Range(Chr(Asc("A") + LstCol%) & (R% + 1), _
   Chr(Asc("A") + c%) & (R% + 1)).BorderAround
End If
  End If
  If InFlexGrid.MergeCol(c%) And LstRow% <> R% Then
If InFlexGrid.TextMatrix(LstRow%, c%) = InFlexGrid.TextMatrix(R%, c%) Then
  shExcel.Range(Chr(Asc("A") + c%) & (LstRow% + 1), _
   Chr(Asc("A") + c%) & (R% + 1)).MergeCells = True
  shExcel.Range(Chr(Asc("A") + c%) & (LstRow% + 1), _
   Chr(Asc("A") + c%) & (R% + 1)).BorderAround
Else
  LstRow% = R%
End If
  End If
  shExcel.Range(Chr(Asc("A") + c%) & _
   (R% + 1)).Font.Color = InFlexGrid.CellForeColor
  If R% < InFlexGrid.FixedRows Or c% < InFlexGrid.FixedCols Then
shExcel.Range(Chr(Asc("A") + c%) & _
(R% + 1)).Font.Bold = True
shExcel.Range(Chr(Asc("A") + c%) & _
  (R% + 1)).Font.BackColor = 40
  End If
  shExcel.Range(Chr(Asc("A") + c%) & (R% + 1)).Value = Buf$
  If FormatMoney Then
shExcel.Range(Chr(Asc("A") + c%) & _
(R% + 1)).NumberFormat = "#,##0.00;#,##0.00;#,##0.00"
  End If
End If
  End If
Next
  Next
  If TextoAdicional$ <> "" Then
' shExcel.Rows(Str(r%+2)).Delete (xlShiftUp)
Do While Right(TextoAdicional$, 1) = vbLf
  TextoAdicional$ = Left(TextoAdicional$, _
    Len(TextoAdicional$) - 1)
Loop
shExcel.Range("A" & (R% + 2)).Value = TextoAdicional$
  End If
  MyExcel.Visible = True
  Set shExcel = Nothing
  Set wbExcel = Nothing
  Set MyExcel = Nothing
End Sub
Public Function StrTran(Cadena As String, Buscar As String, Sustituir As String, Optional Veces As Variant) As String
   Dim Contador As Integer
 
Dim Resultado As String
   Dim Cambios As Integer
 

   Resultado = ""
   Cambios = 0
 
   For Contador = 1 To Len(Cadena)
  If Mid(Cadena, Contador, Len(Buscar)) = Buscar Then

Resultado = Resultado & Sustituir
If Len(Buscar) > 1 Then
   
Contador = Contador + Len(Buscar) - 1
End If


' si se especifica un nº de cambios determinados
If Not IsMissing(Veces) Then
   
Cambios = Cambios + 1
If Cambios = Veces Then
 
Resultado = Resultado & Mid(Cadena, Contador + 1)
 
Exit For
   
End If
End If
If Len(Buscar) > 1 Then
   
Contador = Contador + Len(Buscar) - 1
End If

Else
Resultado = Resultado & Mid(Cadena, Contador, 1)
  End If
   Next
 
   StrTran = Resultado
End Function