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