kuraudeo-batusay Posted January 3, 2012 Report Share Posted January 3, 2012 bueno otra ves aquí haciendo esta consulta desde visual a una base de datos saco información a un listview y me piden en la empresa por ejemplo sacar solo los nombres para exportarlos a una hoja de exel ya con un formato entonces si traspaso la columna de nombres de los clientes a la plantilla de exel debería empezar en una celda especifica no en la primera ya que la hoja ya biene con diseños titulos etc...... alguiqn puede ayudarme en resolver este problema de enviar informacion a excel en las celdas que uno estime conveniente y se rellene hacia abajo :D se los agradeceria mucho me tiene complicado en google ahy tutos pero todos tiran datagridview a excel y desde la primera celda ... por eso no puedo hacer lo que yo necesito ..... les agradesco su ayuda :D Link to comment Share on other sites More sharing options...
AshWilliams Posted January 3, 2012 Report Share Posted January 3, 2012 Sub ExportarListViewAExcel(ParamList As ListView, Optional ByVal szBookTitle As String, Optional ByVal szSheetTitle As String) 'On Error GoTo ExportHandlerError Dim Columna As Integer Dim AppExcel As New Excel.Application Dim Libro As Excel.Workbook Dim Hoja As Excel.Worksheet Dim CeldaActual As Integer ' Celda actual en la Hoja Dim ItemActual As Integer ' Fila Actual en la Lista Dim valor As String 'valor de la celda para saber si es un número Dim Fecha As String ' año para formatear Dim aux1 As String ' comparar si es OP Dim aux2 As String ' comparar si es OP Dim texto As Boolean 'para comprobar cuando es texto ' Si la lista está vacia no se puede exportar. If ParamList.ListItems.Count = 0 Then MsgBox "La lista seleccionada está vacia. No se puede exportar.", vbInformation, App.Title Exit Sub End If Screen.MousePointer = vbHourglass ParamList.Parent.Enabled = False Set Libro = AppExcel.Workbooks.Add Set Hoja = Libro.Worksheets(1) Libro.Title = IIf(szBookTitle = "", "Libro Exportado", szBookTitle) Libro.Author = "CompWin 2" Hoja.Name = IIf(szTitle = "", "Libro Exportado", szSheetTitle) 'Aquí van los títulos de las Columnas CeldaActual = 1 For Columna = 1 To ParamList.ColumnHeaders.Count Hoja.Cells(CeldaActual, Columna).Font.Bold = True Hoja.Cells(CeldaActual, Columna).Value = ParamList.ColumnHeaders(Columna).Text Hoja.Cells(CeldaActual, Columna).Borders.LineStyle = xltick Hoja.Cells(CeldaActual, Columna).Style.IncludeAlignment = True Next Columna CeldaActual = 3 'Dejamos un espacio para que quede bonito ItemActual = 1 While ItemActual <= ParamList.ListItems.Count And gAnularProceso = False For Columna = 1 To ParamList.ColumnHeaders.Count - 1 valor = "" aux1 = "" aux2 = "" If Columna = 1 Then Hoja.Cells(CeldaActual, Columna).Value = CStr(ParamList.ListItems(ItemActual)) valor = ParamList.ListItems(ItemActual).SubItems(Columna) texto = False If IsNumeric(valor) Then ' se desformtea, es un importe 'a no ser que sea un objeto If Mid(valor, 5, 1) = "." And Mid(valor, 7, 1) = "." Then valor = CStr(valor) Else 'si el cuarto caracter por la izqda desde los decimales es un '.', 'entonces es númerico, sino, se trata de un texto númerico If InStr(1, valor, ",", vbTextCompare) Then If Mid(valor, Abs(Len(valor) - (4 + (Len(valor) - _ InStr(1, valor, ",", vbTextCompare)))), 1) = "." Then 'valor = TextoGrabarImporte(valor) valor = CDec(valor) Else texto = True 'valor = CDbl(valor) End If Else If Len(valor) > 3 Then If Mid(valor, Len(valor) - 3, 1) = "." Then 'valor = TextoGrabarImporte(valor) valor = CDec(valor) Else texto = True 'valor = CDbl(valor) End If End If End If End If End If If IsDate(valor) Then aux1 = Mid(valor, 2, 1) aux2 = Mid(valor, 3, 1) If aux1 = "/" Or aux2 = "/" Then 'Se pasa como texto, así es la única forma 'de que excel no lo interprete como fecha Fecha = Mid(valor, 7, 4) aux1 = Mid(valor, 1, 2) aux2 = Mid(valor, 4, 2) valor = aux1 & "/" & aux2 & "/" & Fecha valor = CStr(valor) End If End If If IsDate(valor) Then Hoja.Cells(CeldaActual, Columna + 1).Value = "'" & valor Else If texto Then Hoja.Cells(CeldaActual, Columna + 1).Value = "'" & valor Else Hoja.Cells(CeldaActual, Columna + 1).Value = valor End If End If DoEvents ' Por si decide cancelar el proceso. Next Columna CeldaActual = CeldaActual + 1 ItemActual = ItemActual + 1 Wend AppExcel.Visible = True AppActivate AppExcel.Caption Set Hoja = Nothing 'Descargamos los Objetos... Set Libro = Nothing Set AppExcel = Nothing ParamList.Parent.Enabled = True Screen.MousePointer = vbNormal ExportHandlerError: If Err <> 0 Then If Err = 429 Then ' Esto salta al no poder crear el objeto. MsgBox "Debe tener instalado Microsoft Excel para poder efectuar la Exportación...", vbCritical Else MsgBox "Error número: " & Err.Number & vbCrLf & Err.Description End If End If End Sub Ahí deberías hacer unas pequeñas modificaciones, pero están a la vista. Saludos :krider: Link to comment Share on other sites More sharing options...
Ra Posted January 3, 2012 Report Share Posted January 3, 2012 Puedes usar DataReport también... es más amigable para trabajar... claro que tiene un costo en procesamiento adicional, pero visualmente queda bastante mejor presentado y te evitas problemas con IO... Salu2. Link to comment Share on other sites More sharing options...
kuraudeo-batusay Posted January 4, 2012 Author Report Share Posted January 4, 2012 vale gracias por sus respuestas :D vere las dos opciones el codigo de arriba :D y el datareport aver como me anda y ahy les digo que tal pero muchas muchas gracias :D Link to comment Share on other sites More sharing options...
kuraudeo-batusay Posted January 4, 2012 Author Report Share Posted January 4, 2012 On 1/3/2012 at 6:55 AM, AshWilliams said: Sub ExportarListViewAExcel(ParamList As ListView, Optional ByVal szBookTitle As String, Optional ByVal szSheetTitle As String) 'On Error GoTo ExportHandlerError Dim Columna As Integer Dim AppExcel As New Excel.Application Dim Libro As Excel.Workbook Dim Hoja As Excel.Worksheet Dim CeldaActual As Integer ' Celda actual en la Hoja Dim ItemActual As Integer ' Fila Actual en la Lista Dim valor As String 'valor de la celda para saber si es un número Dim Fecha As String ' año para formatear Dim aux1 As String ' comparar si es OP Dim aux2 As String ' comparar si es OP Dim texto As Boolean 'para comprobar cuando es texto ' Si la lista está vacia no se puede exportar. If ParamList.ListItems.Count = 0 Then MsgBox "La lista seleccionada está vacia. No se puede exportar.", vbInformation, App.Title Exit Sub End If Screen.MousePointer = vbHourglass ParamList.Parent.Enabled = False Set Libro = AppExcel.Workbooks.Add Set Hoja = Libro.Worksheets(1) Libro.Title = IIf(szBookTitle = "", "Libro Exportado", szBookTitle) Libro.Author = "CompWin 2" Hoja.Name = IIf(szTitle = "", "Libro Exportado", szSheetTitle) 'Aquí van los títulos de las Columnas CeldaActual = 1 For Columna = 1 To ParamList.ColumnHeaders.Count Hoja.Cells(CeldaActual, Columna).Font.Bold = True Hoja.Cells(CeldaActual, Columna).Value = ParamList.ColumnHeaders(Columna).Text Hoja.Cells(CeldaActual, Columna).Borders.LineStyle = xltick Hoja.Cells(CeldaActual, Columna).Style.IncludeAlignment = True Next Columna CeldaActual = 3 'Dejamos un espacio para que quede bonito ItemActual = 1 While ItemActual <= ParamList.ListItems.Count And gAnularProceso = False For Columna = 1 To ParamList.ColumnHeaders.Count - 1 valor = "" aux1 = "" aux2 = "" If Columna = 1 Then Hoja.Cells(CeldaActual, Columna).Value = CStr(ParamList.ListItems(ItemActual)) valor = ParamList.ListItems(ItemActual).SubItems(Columna) texto = False If IsNumeric(valor) Then ' se desformtea, es un importe 'a no ser que sea un objeto If Mid(valor, 5, 1) = "." And Mid(valor, 7, 1) = "." Then valor = CStr(valor) Else 'si el cuarto caracter por la izqda desde los decimales es un '.', 'entonces es númerico, sino, se trata de un texto númerico If InStr(1, valor, ",", vbTextCompare) Then If Mid(valor, Abs(Len(valor) - (4 + (Len(valor) - _ InStr(1, valor, ",", vbTextCompare)))), 1) = "." Then 'valor = TextoGrabarImporte(valor) valor = CDec(valor) Else texto = True 'valor = CDbl(valor) End If Else If Len(valor) > 3 Then If Mid(valor, Len(valor) - 3, 1) = "." Then 'valor = TextoGrabarImporte(valor) valor = CDec(valor) Else texto = True 'valor = CDbl(valor) End If End If End If End If End If If IsDate(valor) Then aux1 = Mid(valor, 2, 1) aux2 = Mid(valor, 3, 1) If aux1 = "/" Or aux2 = "/" Then 'Se pasa como texto, así es la única forma 'de que excel no lo interprete como fecha Fecha = Mid(valor, 7, 4) aux1 = Mid(valor, 1, 2) aux2 = Mid(valor, 4, 2) valor = aux1 & "/" & aux2 & "/" & Fecha valor = CStr(valor) End If End If If IsDate(valor) Then Hoja.Cells(CeldaActual, Columna + 1).Value = "'" & valor Else If texto Then Hoja.Cells(CeldaActual, Columna + 1).Value = "'" & valor Else Hoja.Cells(CeldaActual, Columna + 1).Value = valor End If End If DoEvents ' Por si decide cancelar el proceso. Next Columna CeldaActual = CeldaActual + 1 ItemActual = ItemActual + 1 Wend AppExcel.Visible = True AppActivate AppExcel.Caption Set Hoja = Nothing 'Descargamos los Objetos... Set Libro = Nothing Set AppExcel = Nothing ParamList.Parent.Enabled = True Screen.MousePointer = vbNormal ExportHandlerError: If Err <> 0 Then If Err = 429 Then ' Esto salta al no poder crear el objeto. MsgBox "Debe tener instalado Microsoft Excel para poder efectuar la Exportación...", vbCritical Else MsgBox "Error número: " & Err.Number & vbCrLf & Err.Description End If End If End Sub Ahí deberías hacer unas pequeñas modificaciones, pero están a la vista. Saludos :krider: disculpa trate de copiar el codigo y lo arregle arto ya que en el visual 2010 ahy artas cosas que no toma asi que las cambie pero = ahy errores y queria pregunbtarte si has utilizado estos proyectos para automatizar exel........ se crea un nuebo proyecto... despues se escoge el lenguaje que seria .net y el tipo de proyecto en base a office y en exel 2007 por ejemplo o 2010.... 3.. aquí tendra que seleccionar un libro de excel ya creado o uno nuebo......entonces yo queria ocupar un libro de excel ya listo con titulos y un formato definido anteriormente y ahy meterle la info del programa echo en visual.....o desde la base de datos directamente :D ........... ya y ahora aparecerá el libro dentro del visual donde podemos ingresarle herraminetas de formularios o trabajar ..... y aqui se puede ver que incruste un boton en el libro pero no se utilizar este tipo de proyecto como dirigirme a una celda en especifico hacer las consultas sql y rellenar las casillas con la info de la base de datos si tu sabes como hacerlo me ayudarias por que en google trato de buscar y no me aparece mucha info son unos proyectos no se si se puede adjuntar a otro proyecto de visual con formularios y referencias???????????????????????????????????????????????????????????????????????? Link to comment Share on other sites More sharing options...
AshWilliams Posted January 5, 2012 Report Share Posted January 5, 2012 El código que habia posteado era para un proyecto en Visual Basic onda normal...lo que tú estás haciendo es casi lo mismo que trabajar desde Excel con Macros VB y ahi no he tenido el gusto de trabajar. Sin embargo estos enlaces te pueden resultar interesantes: http://msdn.microsoft.com/en-us/library/ee814737.aspx http://archive.msdn.microsoft.com/OfficeDevFuture http://visualstudiomagazine.com/articles/2011/06/20/wcovb_automate-excel.aspx Saludos :krider: Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now