Foros aprenderaprogramar.com
		Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Mary en 19 de Junio 2016, 12:50
		
			
			- 
				Hola de nuevo.  Estoy intentando hacer un bucle para pasar los datos de una columna en Excel a una columna de un datagridview en visual basic 2010 express.
 
 El código que tengo es el siguiente:
 Dim oExcel As Object
 Dim oBook As Object
 Dim oSheet1 As Object
 
 'Iniciar un nuevo libro en Excel
 oExcel = CreateObject("Excel.Application")
 oBook = oExcel.Workbooks.Open("C:\Users\Packard Bell\Desktop\Viscosidad.xlsx")
 oSheet1 = oBook.Worksheets("Hoja2")
 Dim stConexion1 As New MySqlConnection("server= localhost; user id = root; password =; database = basededatos2") 'este es el codigo que funciona para office 2007 y 2010
 
 Dim col  As New DataGridViewTextBoxColumn
 col.Name = "DATOS"
 
 
 DataGridView42.Columns.Add(col)
 DataGridView42.Rows.Add(60)
 
 
 
 Dim a As Integer
 
 For j = 0 To DataGridView42.RowCount - 1
 For j = 1 To 60
 DataGridView42.Rows(j).Cells(0).Value = CDbl(oSheet1.Range("a" & j).Value)
 Next
 Next
 
 
 stConexion1.Open()
 
 El problema es que no funciona. Sólo consigo que todas las celdas de la columna del datagridview se complete con 0. Creo que el fallo esta en que faltan poner comillas en la expresión:
 oSheet1.Range("a" & j).Value
 
 pero todas las pruebas que he hecho no han salido, por lo que ya no se si es ahí donde está el error. Tampoco me sale ningún mensaje de error, únicamente se completa la columna con 0.
 ¿Alguien sabe donde podría encontrarse el error? Gracias.
 Saludos,
 
 
- 
				Hola de nuevo,
 he conseguido encontrar el error. Había que poner
 For a = 1 to a +1
 Ahora me copia la columna completamente en el datagridview.
 
   Dim a As Integer
 
 For j = 0 To DataGridView42.RowCount - 1
 For a = 1 To a + 1
 DataGridView42.Rows(j).Cells(0).Value = CDbl(oSheet1.Range("A" & a).Value)
 Next a
 Next j
 Saludos.
- 
				Hola,
 sigo teniendo un problema con este código.
 Si en lugar  de 60 filas, añado 1250 filas (que son las que realmente necesito), la aplicación se bloquea.
 
 DataGridView42.Rows.Add(1250)
 
 
 For j = 0 To DataGridView42.RowCount - 1
 For j = 1 To 1250
 DataGridView42.Rows(j).Cells(0).Value = CDbl(oSheet1.Range("a" & j).Value)
 Next
 Next
 
 
 
 Habría alguna forma de añadir tantas filas sin que esto ocurra? Gracias.
 Saludos.
- 
				Hola Mary en este código hay algo extraño:
 
 For j = 0 To DataGridView42.RowCount - 1
 For j = 1 To 1250
 DataGridView42.Rows(j).Cells(0).Value = CDbl(oSheet1.Range("a" & j).Value)
 Next
 Next
 
 Si j es el índice del bucle exterior y luego es también el índice del bucle interior ahí parece que generas un conflicto entre índices de bucles.
 
 El problema de bloqueo con un excesivo número de filas es posible que puedas resolverlo añadiendo filas en paquetes de tamaño más reducido. Por ejemplo de 250 en 250, por ejemplo:
 
 For j = 1 To 250
 DataGridView42.Rows(j).Cells(0).Value = CDbl(oSheet1.Range("a" & j).Value)
 Next
 
 For j = 251 To 500
 DataGridView42.Rows(j).Cells(0).Value = CDbl(oSheet1.Range("a" & j).Value)
 Next
 
 For j = 500 To 750
 DataGridView42.Rows(j).Cells(0).Value = CDbl(oSheet1.Range("a" & j).Value)
 Next
 
 For j = 751 To 1000
 DataGridView42.Rows(j).Cells(0).Value = CDbl(oSheet1.Range("a" & j).Value)
 Next
 
 For j = 1001 To 1250
 DataGridView42.Rows(j).Cells(0).Value = CDbl(oSheet1.Range("a" & j).Value)
 Next
 
 En realidad podrías automatizar para que te vaya cogiendo paquetes sin necesidad de repetir el código del bucle, sino por ejemplo llamando a un procedimiento o función.
 
 Saludos
- 
				Hola Alex, al final he podido encontrar una función que pasar los datos de la columna de la hoja excel al datagridview. No consigo que funciona la función insertar código, así que lo escribo a continuación tal cual:
 
 'Primero en el formulario tengo un botón desde donde llama la función que inserta la columna excel
 
 Private Sub Button70_Click(sender As System.Object, e As System.EventArgs) Handle Button70.Click
 
 Dim col As New DataGridViewTextBoxColumn
 DataGridView42.Columns.Add(col)
 ImportExcellToDataGridView("\\server\Docs\Publicos\coeficiente\Viscosidad.xlsx",   DataGridView42)
 
 End Sub
 
 'A continuación pongo la función ImportExceltoDataGridview, la cual pasa los datos de la columna A de la  hoja 2 de libro excel al datagridview.
 
 
 Public Function ImportExcellToDataGridView(ByRef path As String, ByVal Datagrid As DataGridView)
 
 Try
 Dim stConexion As String = ("Provider=Microsoft.ACE.OLEDB.12.0;" & ("Data Source=" & (path & ";Extended Properties=""Excel 12.0;Xml;HDR=NO;IMEX=2"";")))
 Dim cnConex As New OleDb.OleDbConnection(stConexion)
 Dim Cmd As New OleDb.OleDbCommand("Select * From [Hoja2$]")
 Dim Ds As New DataSet
 Dim Da As New OleDb.OleDbDataAdapter
 Dim Dt As New DataTable
 cnConex.Open()
 Cmd.Connection = cnConex
 Da.SelectCommand = Cmd
 Da.Fill(Ds)
 Dt = Ds.Tables(0)
 Datagrid.Columns.Clear()
 Datagrid.DataSource = Dt
 cnConex.Close()
 
 Catch ex As Exception
 MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
 End Try
 Return True
 End Function
 
 Espero pueda servirle a alguien. Gracias y saludos.
 
- 
				Hola Mary gracias por compartir la solución, puede servir de ayuda para otras personas
 
 Saludos