Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Informe en Excel

Estas en el tema de Informe en Excel en el foro de Visual Basic clásico en Foros del Web. Hola Tengo un programa en VB6 con BD SQL Server 2005, he realizado un informe en excel en el cual muestro algunos campos. El problema ...
  #1 (permalink)  
Antiguo 10/04/2008, 03:13
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Informe en Excel

Hola

Tengo un programa en VB6 con BD SQL Server 2005, he realizado un informe en excel en el cual muestro algunos campos.

El problema lo tengo con un campo tipo varchar en el cual tengo un texto muy grande, y el texto puede tener varias lineas (saltos de linea). El problema es que al intentar mostrar este campo en excel el ancho de la linea no se adapta al texto (por mucho que lo intente con "Ajustar Texto").

He barajado tres opciones:

1.- Intentar que de alguna forma autoajuste el ancho de la linea de excel
2.- Contar las lineas o saltos de linea que tengo en el campo de la BD y dependiendo de las lineas definir el ancho de la celda. El problema es que no se como puedo contar las lineas de un campo tipo varchar(MAX) ya que en el campo de la bd aparecen en una sola linea.
3.- Insertar un Label y pasarle el texto. He conseguido insertar el label, pero no se como pasarle el texto.

Alguna idea?

--Gracias--
  #2 (permalink)  
Antiguo 10/04/2008, 03:44
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Re: Informe en Excel

Hola

Se me ocurre que podrías hacer lo siguiente:

Al cargar los datos, compruebas la longitud del texto y si sobrepasa la longitud que tu decidas, le pones a la celda la alineación del texto, Vertical = Justificar. (Creo que la propiedad es .VerticalAlignment = xlJustify)

O una vez cargados los datos, formatear esa columna como puse antes.

un saludo
  #3 (permalink)  
Antiguo 10/04/2008, 05:00
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Re: Informe en Excel

Gracias

Pero en realidad lo que necesito no es la longitud (creo) sino las lineas, ya que si paso el valor del campo a una variable, tengo el siguiente valor:

Cita:
Hola Esto es una prueba Hola !!!
Pero al pasarlo a excel me lo muestra en tres líneas (esto esta correcto, ya que al introducirlo yo también lo introduje en un textbox multilínea)

Cita:
Hola

Esto es una prueba

HOLA !!!
Si cuento los caracteres me dice que tiene 43, pero lo que me gustaría es calculas las lineas, es decir, 3, de esta forma podría darle un ancho de linea a excel de 12,75 (ancho por defecto)x3

--Saludos y gracias--
  #4 (permalink)  
Antiguo 10/04/2008, 05:19
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Re: Informe en Excel

Hola, cuando dices el ancho de linea creo que te refieres al alto.

Para contar las líneas que tiene un TextBox Multiline, prueba con la API SendMessage, te pongo un ejemplo:


Código:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, lParam As Any) As Long
Const EM_GETLINECOUNT = &HBA

Private Sub Command1_Click()
Dim NumLineas As Integer

NumLineas = SendMessage(Text1.hWnd, EM_GETLINECOUNT, 0&, ByVal 0&)
MsgBox "El TextBox Multiline tiene " & NumLineas & " líneas"
End Sub
Un saludo
  #5 (permalink)  
Antiguo 10/04/2008, 07:48
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Re: Informe en Excel

Gracias por tu ayuda Avellaneda.

Pero el problema es que, aunque yo introduzco el texto a través de un textbox multilinea, luego lo guardo en un campo de la bd, y para pasarlo a excel el dato lo tengo en un recordset.

Al final lo he solucionado de la siguiente forma:

Código:
    For i = 1 To Len(RegNota.Fields(0).Value)
        If Mid(RegNota.Fields(0).Value, i, 1) = vbCr Then
            contLin = contLin + 1
        End If
    Next i
    contLin = contLin + 1
    
    ExcelHoja.Cells(ultima + 5, 2) = RegNota.Fields(0)
    ExcelApp.Range("B" & ultima + 5, "I" & ultima + 5).MergeCells = True
    ExcelHoja.Rows(ultima + 5 & ":" & ultima + 5).RowHeight = 12.75 * contLin
--Saludos y Gracias--
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:28.