Exportar MSFlexgrid a Excel

dibarra
26 de Octubre del 2007
Agradecería un código de muestra de cómo exportar de un control MSFlexgrid a Excel. En realidad sé como hacerlo a un .txt pero no a un .xls.

zabait
26 de Octubre del 2007
Dicho y hecho
Ahi te va una función que las estoy usando yo, la encontré en www.freevbcode.com

Un saludo

gurgur

Sub exportarHGridAExcel(strBook As String, HGrid As MSHFlexGrid, strHGrid As String, _
Optional HG As Variant, Optional strHG As String)

Dim objXL As New Excel.Application
Dim wbXL As New Excel.Workbook
Dim wsXL As New Excel.Worksheet
Dim intRow As Integer ' counter
Dim intCol As Integer ' counter

If Not IsObject(objXL) Then
MsgBox "Necesitas tener instalado Microsoft Excel to use this function", _
vbExclamation, "Print to Excel"
Exit Sub
End If

'On Error Resume Next is necessary because someone may pass more rows or columns than 'the flexgrid has you can instead check for this, or rewrite the function so that it exports all non-fixed cells to Excel

On Error Resume Next

' open Excel
objXL.Visible = True
Set wbXL = objXL.Workbooks.Add
Set wsXL = objXL.ActiveSheet

objXL.Caption = strBook
wsXL.Name = strHGrid

' fill worksheet
For intRow = 1 To HGrid.Rows
For intCol = 1 To HGrid.Cols
With HGrid
wsXL.Cells(intRow, intCol).Value = _
.TextMatrix(intRow - 1, intCol - 1) & " "
End With
Next
Next
'******************************************************************
' format the look
For intCol = 1 To HGrid.Cols
wsXL.Columns(intCol).AutoFit
'wsXL.Columns(intCol).AutoFormat (1)
wsXL.Range("a1", Right(wsXL.Columns(HGrid.Cols).AddressLocal, _
1) & HGrid.Rows).AutoFormat
Next
'*****************************************************************

'¿Hay otro grid en la cabecera?
If Not IsMissing(HG) Then

Dim wsXL2 As New Excel.Worksheet

' objXL.Workbooks(0).Worksheets.Add (objXL.ActiveSheet)
Set objXL.ActiveSheet = objXL.Worksheets(objXL.Worksheets.Count - 1).Activate
Set wsXL2 = objXL.ActiveSheet

wsXL2.Name = strHG

' fill worksheet
For intRow = 1 To HG.Rows
For intCol = 1 To HG.Cols
With HG
wsXL2.Cells(intRow, intCol).Value = _
.TextMatrix(intRow - 1, intCol - 1) & " "
End With
Next
Next
'******************************************************************
' format the look
For intCol = 1 To HG.Cols
wsXL2.Columns(intCol).AutoFit
'wsxl22.Columns(intCol).AutoFormat (1)
wsXL2.Range("a1", Right(wsXL2.Columns(HG.Cols).AddressLocal, _
1) & HG.Rows).AutoFormat
Next
'*****************************************************************

End If

End Sub

zabait
26 de Octubre del 2007
Tengo otras funciones que abren otras hojas de excel y otras cosillas, pero bueno, empieza con esto rompete la cabeza un rato y después si no sabes como te voy dando algo más

No sólo va a ser pedir y recibir, no???

Es facil, así que intenta modificar la función para que haga más cosas.

Consejo: Ver el editor de macros de excel, ahi te viene el código fuente en vb de lo que quieras hacer)

Darwin
26 de Octubre del 2007
Que tal, a ver si te sirve este codigo:
ExportarFlexGrid( C1.Win.C1FlexGrid.C1FlexGrid flexGrid)
{
if (flexGrid != null)
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.DefaultExt = "xls";
dlg.Filter = "Archivos de Microsoft Office Excel (*.xls) |*.xls";
if (dlg.ShowDialog() != DialogResult.OK)
return; flexGrid.SaveExcel (dlg.FileName,"Hoja1",FileFlags.IncludeFixedCells);
}
}

Te explico:
Verifico que el flexGrid no este vacio
Abro un cuadro de dialogo con extension .xls por defecto
Y llamo al metodo saveExcel del felx grid y le paso:
el nombre del archivo,
el nombre de la hoja,
y el FileFlag que indica que celdas del flex quieres que se exporten, en este caso IncludeFixedCells, me exporta el flex incluido las cabeceras.

Listo!!!
Escribeme si fue de ayuda