none
importar de excel a datagridview

    Pregunta

  • Alguien que me pueda proporcionar un código para importar una hoja de excel a un datagridview y ya que estes cargado en el dgv guardarlo en la base de datos, mi base de datos es en sql y mi office es 2003

    Gracias

    Saludos!!
    lunes, 18 de enero de 2010 15:54

Respuestas

Todas las respuestas

  • Hola, podrias hacerlo con ADO usando un connectionstring para excel(http://www.connectionstrings.com/excel)
    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    lunes, 18 de enero de 2010 16:00
  • hola

    este es un excelente ejemplo que hace uso del provider de ado.net para excel y asi acceder a lso datos de la hoja como si se tratara de una db

    Importar de Excel

    como veras lo consultas, crea el datatable y lo bindea a la grilla

    aqui hay mas info de como acceder a excel mediante ado.net

    C ó mo usar ADO.NET para recuperar y modificar registros en un libro de Excel con Visual Basic .NET
    Reading and Writing Excel Spreadsheets Using ADO.NET C# DbProviderFactory
    Leer un fichero Excel desde ASP.NET con ADO.NET


    Connection strings for Excel
    Connection strings for Excel 2007


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta marpao martes, 19 de enero de 2010 15:02
    lunes, 18 de enero de 2010 16:04
  • La hoja de excel la quieres migrar tal tal cual
    o necesita ser previamente procesada?
    lunes, 18 de enero de 2010 16:49
  • jaja ola omar :D

    pues va a ser procesada al cargar los datos a la bd

    se supone que estos campos son los que habría en la hoja de excel

    parte     Desc      um     fecha     cant



    pero el grid mostrará mas columnas
     
    sería algo asi....

    Proveedor     Parte     Desc     Um     DLun     RLun     DMar     RMar



    en los primeros campos la cantidad es igual a lo que es DLun, RLun


    lunes, 18 de enero de 2010 18:21
  • hola

    y porque no se entiende ?

    como veras usa ado.net para trabajr el excel como si fuera una db y es ams realizas una consulta sql y cargas los datos en un datatable si quieres y puede procesarlos como necesites

    por ahi la primer parte puede obviarla ya que lo que ahce es permtitirte seleccioanr el archivo de excel con el que trabajaras
    pero si este es fijo puede usar la ruta directa, sin tener que seleccionarlo

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 18 de enero de 2010 18:41
  • ya lo entendi, bueno me quedo una duda

    en esta linea

    strconn = "Provider=Microsoft.Jet.Oledb.4.0; data source= " + TextPathExcel.Text + ";Extended properties=Excel 8.0;hdr=yes;imex=1"

    me dice esto: Keyword not supported: 'provider'.

    a que se debe??
    lunes, 18 de enero de 2010 18:45
  • hola

    segun obtuve el conection string parece estar correcto

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";

    pero donde esta el control textbox, lo usas asi como esta o declaras una ruta a tu archivo de excel

    una consulta este archivo excel es de Office 2007?
    lo pregunto porque si es el connection string cambia a algo como esto

    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES";

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 18 de enero de 2010 18:55
  • es el mismo codigo que el del ejemplo

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim openFD As New OpenFileDialog()
            With openFD
                .Title = "Seleccionar archivos"
                .Filter = "Todos los archivos (*.xls)|*.xls"
                .Multiselect = False
                .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
                If .ShowDialog = Windows.Forms.DialogResult.OK Then
                    TextPathExcel.Text = .FileName
                End If
            End With

            Try
                Dim strconn As String
                strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties=Excel 8.0;HDR=Yes;IMEX=1"
                Dim mconn As New SqlConnection(strconn)
                Dim ad As New SqlDataAdapter("Select * from [" & TextHoja.Text & "$]", mconn)
                mconn.Open()
                ad.Fill(dt)
                mconn.Close()
                Me.DataGridView1.DataSource = dt
            Catch ex As SqlException
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    y es officecc 20003, que el provider no es pasa bd en acces??
    lunes, 18 de enero de 2010 19:02
  • Hola Marpao estas usando objetos que no corresponden prueba con esto:

    Tienes que tener el imports System.Data.OleDb

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim openFD As New OpenFileDialog()
            With openFD
                .Title = "Seleccionar archivos"
                .Filter = "Todos los archivos (*.xls)|*.xls"
                .Multiselect = False
                .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
                If .ShowDialog = Windows.Forms.DialogResult.OK Then
                    TextPathExcel.Text = .FileName
                End If
            End With

            Try
                Dim strconn As String
                strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties=Excel 8.0;HDR=Yes;IMEX=1"
                Dim mconn As New OleDbCOnnection(strconn)
                Dim ad As New OleDBDataAdapter("Select * from [" & TextHoja.Text & "$]", mconn)
                mconn.Open()
                ad.Fill(dt)
                mconn.Close()
                Me.DataGridView1.DataSource = dt
            Catch ex As SqlException
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    lunes, 18 de enero de 2010 19:24
  • hola

    claro no es el mismo codigo en tu ejemplo usas los objetos de ado.net para Sql server, pero en este caso debes usar los de OleDb

    si comparas los ejemplos veras que este usa el OleDbConnection
    jtorrecilla puso el codigo con la modificaciones, epro si analizas el link del ejemplo original alli tambien lo veras

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 18 de enero de 2010 21:28
  • Ola perdón que me tarde en contestar, ok ya entendí lo que me dicen, ahora me marca un erro en la parte en que se habre la conexión, me dice lo siguiente: Could not find installable ISAM.
    martes, 19 de enero de 2010 14:27
  • hola

    ten en cuanta un detalle que peude generar ese error
    y es el incorrecto armado del connection string


    si analzias nuvamente ej ejemplo origina como arma este string veras

    strconn = "Provider=Microsoft.Jet.Oledb.4.0; data source= " + TextPathExcel.Text + ";Extended properties=""   Excel 8.0;hdr=yes;imex=1""" 


    esas comillas que visualizas en la seccion de Extended properties, no las puso porque le gusto sino que deben ir de forma obligatoria ya que es asi como se arma la cadena de conexion

    esos parametros de propiedades deben ir entre comillas para que funcione

    valida que en tu ejemplo esten puestas

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 19 de enero de 2010 14:31
  • ok, ese error ya lo solucione y ya no lo marca, pero ahora marca este: "'$' is not a valid name.  Make sure that it does not include invalid characters or punctuation and that it is not too long."

    y luego le quite el caracter $ y me dice: "Syntax error in FROM clause."
    martes, 19 de enero de 2010 14:42
  • hola

    como es la consulta que estas armando ?

    estas indicando el nombre de un solapa valida de tu Excel

    como veras en ele ejmplo usa un TextHoja
    alli deberias pones el nombre de una solapa valida de tu excel quedando por ejemplo algo como esto

    SELECT * FROM [Sheet1$]


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta marpao martes, 19 de enero de 2010 15:02
    • Desmarcado como respuesta marpao martes, 19 de enero de 2010 15:02
    martes, 19 de enero de 2010 14:46
  • ijole de verdad que mil gracias ya me salió, gracias de verdad

    Saludos!!
    martes, 19 de enero de 2010 15:03