Jump to content

exportar desde en un formulario de visual .net 2010 a excel


Recommended Posts

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

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

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

  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...

 

2206d6cf8b95e15c1e1ace21b513b8b2183697d356121eac4991df938669fb9d6g.jpg

 

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....

 

eda1398a7806d4b7ed309da71c519c2d71a67c8b4cabb8be0db6b71e4bce65936g.jpg

 

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 ...........

 

70182ee974669d58f0d9543eb0d2008b90648864df65764267e0c9ad159713b86g.jpg

 

 

ya y ahora aparecerá el libro dentro del visual donde podemos ingresarle herraminetas de formularios o trabajar .....

 

5c6542295a3e54f9bd2e8fb6600a1596b63b8db639d08ae0737fa4089e328b336g.jpg

 

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

 

c1680696d2b5fd3dcfbaaec32662fec6ce142bea7724a9ddda946e1e5cb8fef66g.jpg

 

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...