none
CÓDIGOS PARA EXPORTAR A EXCEL Y WORD SOLO LAS FILAS SELECCIONADAS DE UN DATAGRIDVIEW

    Pregunta

  • Buenas tarde y un saludo, como el titulo ya lo aclara me gustaria que al dar click en el boton1 me experte no todo si no solo las filas que seleccione del DataGridView a Excel y cuando de click en el boton2 me exporte de igual manera solo lo que seleccione del DataGridView pero esta vez a Word..

    Mis base de datos es de "ACCES"

    Como se muestra en las imagenes

    DataGridView

    a excel

    y a word

    es solo un ejemplo de lo que quiero

    De antemano muchas gracias..





    lunes, 19 de diciembre de 2016 17:52

Respuestas

  • Hola:
    En un Form como el de la imagen, copia y pega el siguiente código

    Option Explicit On
    Option Strict Off
    Imports System.Data.SqlClient
    Imports Spire.Xls
    Imports DocumentFormat.OpenXml.Packaging
    Imports DocumentFormat.OpenXml.Wordprocessing
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Dim lsCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
            Try
                Dim loDataTable As New DataTable
                Dim lsQuery As String = "SELECT CustomerID, CompanyName FROM Customers"
                Using loConexion As New SqlConnection(lsCadenaSQL)
                    Dim loDataAdapter As New SqlDataAdapter(lsQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                End Using
                Me.DataGridView1.DataSource = loDataTable
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
        Private Sub btnExcel_Click(sender As Object, e As EventArgs) Handles btnExcel.Click
            Dim ldtDataTable As DataTable = CType(Me.DataGridView1.DataSource, DataTable).Clone
            For Each Seleccion As DataGridViewRow In DataGridView1.SelectedRows
                ldtDataTable.Rows.Add(ObtenerValoresFila(Seleccion))
            Next
            lP_CreateExcelDoc(ldtDataTable, Application.StartupPath & "\Prueba.xlsx", 1, 1)
        End Sub
        Function ObtenerValoresFila(ByVal fila As DataGridViewRow) As String()
            'Dimensionar el array al tamaño de columnas del DGV
            Dim Contenido(Me.DataGridView1.ColumnCount - 1) As String
            'Rellenar el contenido con el valor de las celdas de la fila
            For Ndx As Integer = 0 To Contenido.Length - 1
                Contenido(Ndx) = CStr(fila.Cells(Ndx).Value)
            Next
            Return Contenido
        End Function
        Private Sub lP_CreateExcelDoc(ByVal vdtDataTable As DataTable, ByVal filepath As String, ByVal fila As Integer, ByVal Columna As Integer)
            Dim workbook As Workbook = New Workbook()
            workbook.CreateEmptySheets(1)
            'Inicializar hoja de cálculo
            Dim sheet As Worksheet = workbook.Worksheets(0)
            sheet.InsertDataTable(vdtDataTable, True, fila, Columna)
            'Guardamos el documento
            workbook.SaveToFile(filepath, ExcelVersion.Version2007)
            System.Diagnostics.Process.Start(filepath)
        End Sub
        Private Sub btnWord_Click(sender As Object, e As EventArgs) Handles btnWord.Click
            Dim lsFichero As String = Application.StartupPath & "\Prueba.docx"
            lP_CreateWordDoc(lsFichero, "")
            Dim ldtDataTable As DataTable = CType(Me.DataGridView1.DataSource, DataTable).Clone
            For Each Seleccion As DataGridViewRow In DataGridView1.SelectedRows
                ldtDataTable.Rows.Add(ObtenerValoresFila(Seleccion))
            Next
            lP_InsertTableInDoc(lsFichero, ldtDataTable)
            System.Diagnostics.Process.Start(lsFichero)
        End Sub
        Private Sub lP_CreateWordDoc(ByVal filepath As String, ByVal msg As String)
            Using doc As WordprocessingDocument = WordprocessingDocument.Create(filepath, DocumentFormat.OpenXml.WordprocessingDocumentType.Document)
                ' Añadir una pieza del documento principal.
                Dim mainPart As MainDocumentPart = doc.AddMainDocumentPart()
                ' Cree la estructura del documento y añada algún texto.
                mainPart.Document = New Document()
                Dim body As Body = mainPart.Document.AppendChild(New Body())
                Dim para As Paragraph = body.AppendChild(New Paragraph())
                Dim run As Run = para.AppendChild(New Run())
                ' String msg contiene el texto
                run.AppendChild(New Text(msg))
            End Using
        End Sub

        Private Sub lP_InsertTableInDoc(ByVal filepath As String, ByVal vdtDataTable As DataTable)
            ' Abra un WordprocessingDocument para editarlo usando el path de archivo.
            Using wordprocessingDocument As WordprocessingDocument = wordprocessingDocument.Open(filepath, True)
                ' Asignar una referencia al cuerpo de documento existente.
                Dim body As Body = wordprocessingDocument.MainDocumentPart.Document.Body
                ' Crear una tabla.
                Dim tabla As New Table()
                ' Establecer el estilo y el ancho de la tabla.
                Dim tableProp As New TableProperties()
                Dim tableStyle As New TableStyle() With {.Val = "TableGrid"}
                ' Hacer que el ancho de la tabla sea 100% del ancho de la página.
                Dim tableWidth As New TableWidth() With {.Width = "5000", .Type = TableWidthUnitValues.Pct}
                ' Aplicar
                tableProp.Append(tableStyle, tableWidth)
                tabla.AppendChild(tableProp)
                Dim TablaGrid As New TableGrid
                For liCiclo As Integer = 0 To vdtDataTable.Columns.Count
                    TablaGrid.Append(New GridColumn())
                Next
                tabla.AppendChild(TablaGrid)
                ' Crear 1 fila a la tabla.
                Dim tablarow As New TableRow()
                Dim tablacell As TableCell
                'Crear la tabla con la 1ª fila
                For col As Int32 = 1 To vdtDataTable.Columns.Count
                    tablacell = New TableCell(New Paragraph(New Run(New Text(vdtDataTable.Columns(col - 1).ColumnName))))
                    tablarow.Append(tablacell)
                Next
                ' Agregar fila a la tabla.
                tabla.AppendChild(tablarow)
                'Agregar la tabla al documento
                body.AppendChild(tabla)
                ' Insertamos las filas en la tabla
                For liFila As Int32 = 0 To vdtDataTable.Rows.Count - 1
                    tablarow = New TableRow
                    For liColumna As Int32 = 0 To vdtDataTable.Columns.Count - 1
                        ' Insertamos el valor de las celdas.
                        tablacell = New TableCell(New Paragraph(New Run(New Text(vdtDataTable.Rows(liFila).Item(liColumna).ToString))))
                        tablarow.Append(tablacell)
                    Next
                    ' Agregar fila a la tabla.
                    tabla.AppendChild(tablarow)
                Next
            End Using
        End Sub
    End Class

    P.D. Tienes que añadir las referencias de la siguiente imagen

    Un saludo desde Bilbo
    Carlos

    lunes, 19 de diciembre de 2016 22:27
  • Hola:

    > Dim lsCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True" <
    Con esta linea, estoy definiendo la cadena de conexion es decir que me voy a conectar a una instancia local de SQL Server llamada SQLEXPRESS y a la base de datos Northwind.
    Tu en esa cadena de conexion tendras que poner la instancia y la base de datos. Si la instancia no es local, esta debera admitir conexiones remotas.Esto si quieres usar SQL Server porque no has dicho todavia cual es el motor de base de datos que estas usando.
    > Dim lsQuery As String = ("SELECT ORDEN NO, CLIENTE, FECHA DE PEDIDO, PROVEDOR, AT N, FECHA DE ENTREGA, CANTIDAD, CLAVE, LARGO, ANCHO, ALTO, BCO KRAFT, CS DC, UNION, IMPRESION, P UNICO, IMPORTE, SUB-TOTAL , 16%IVA, TOTAL FROM Customers") <
    Estas usando una consulta con campos de tu tabla y pones otra tabla (Customers) que no tiene dichos campos
    ¿Porque no pones el motor que usas y las estructuras de las tablas implicadas?

    Un saludo desde Bilbo
    Carlos


    martes, 20 de diciembre de 2016 21:07
  • Hola:
    Ya que te "RESISTES" a poner la estructura de la tabla, para el ejemplo voy a usar la tabla Customers de la base de datos Northwind
    El codigo es el siguiente
    Option Explicit On
    Option Strict Off
    Imports System.Data.OleDb
    Imports Spire.Xls
    Imports DocumentFormat.OpenXml.Packaging
    Imports DocumentFormat.OpenXml.Wordprocessing
    Imports System.IO
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Dim lsCadenaAccess As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\Northwind.accdb"
            Try
                Dim loDataTable As New DataTable
                Dim lsQuery As String = "SELECT CustomerID, CompanyName, ContactName FROM Customers"
                Using loConexion As New OleDbConnection(lsCadenaAccess)
                    Dim loDataAdapter As New OleDbDataAdapter(lsQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                End Using
                Me.DataGridView1.DataSource = loDataTable
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
        Private Sub btnExcel_Click(sender As Object, e As EventArgs) Handles btnExcel.Click
            Dim ldtDataTable As DataTable = CType(Me.DataGridView1.DataSource, DataTable).Clone
            For Each Seleccion As DataGridViewRow In DataGridView1.SelectedRows
                ldtDataTable.Rows.Add(ObtenerValoresFila(Seleccion))
            Next
            lP_CreateExcelDoc(ldtDataTable, Me.txtPath.Text, 1, 1)
        End Sub
        Function ObtenerValoresFila(ByVal fila As DataGridViewRow) As String()
            'Dimensionar el array al tamaño de columnas del DGV
            Dim Contenido(Me.DataGridView1.ColumnCount - 1) As String
            'Rellenar el contenido con el valor de las celdas de la fila
            For Ndx As Integer = 0 To Contenido.Length - 1
                Contenido(Ndx) = CStr(fila.Cells(Ndx).Value)
            Next
            Return Contenido
        End Function
        Private Sub lP_CreateExcelDoc(ByVal vdtDataTable As DataTable, ByVal filepath As String, ByVal fila As Integer, ByVal Columna As Integer)
            Dim workbook As Workbook = New Workbook()
            workbook.CreateEmptySheets(1)
            'Inicializar hoja de cálculo
            Dim sheet As Worksheet = workbook.Worksheets(0)
            sheet.InsertDataTable(vdtDataTable, True, fila, Columna)
            'Guardamos el documento
            workbook.SaveToFile(filepath, ExcelVersion.Version2007)
            System.Diagnostics.Process.Start(filepath)
        End Sub
        Private Sub btnWord_Click(sender As Object, e As EventArgs) Handles btnWord.Click
            lP_CreateWordDoc(Me.txtPath.Text, "")
            Dim ldtDataTable As DataTable = CType(Me.DataGridView1.DataSource, DataTable).Clone
            For Each Seleccion As DataGridViewRow In DataGridView1.SelectedRows
                ldtDataTable.Rows.Add(ObtenerValoresFila(Seleccion))
            Next
            lP_InsertTableInDoc(Me.txtPath.Text, ldtDataTable)
            System.Diagnostics.Process.Start(Me.txtPath.Text)
        End Sub
        Private Sub lP_CreateWordDoc(ByVal filepath As String, ByVal msg As String)
            Using doc As WordprocessingDocument = WordprocessingDocument.Create(filepath, DocumentFormat.OpenXml.WordprocessingDocumentType.Document)
                ' Añadir una pieza del documento principal.
                Dim mainPart As MainDocumentPart = doc.AddMainDocumentPart()
                ' Cree la estructura del documento y añada algún texto.
                mainPart.Document = New Document()
                Dim body As Body = mainPart.Document.AppendChild(New Body())
                Dim para As Paragraph = body.AppendChild(New Paragraph())
                Dim run As Run = para.AppendChild(New Run())
                ' String msg contiene el texto
                run.AppendChild(New Text(msg))
            End Using
        End Sub
        Private Sub lP_InsertTableInDoc(ByVal filepath As String, ByVal vdtDataTable As DataTable)
            ' Abra un WordprocessingDocument para editarlo usando el path de archivo.
            Using wordprocessingDocument As WordprocessingDocument = wordprocessingDocument.Open(filepath, True)
                ' Asignar una referencia al cuerpo de documento existente.
                Dim body As Body = wordprocessingDocument.MainDocumentPart.Document.Body
                ' Crear una tabla.
                Dim tabla As New Table()
                ' Establecer el estilo y el ancho de la tabla.
                Dim tableProp As New TableProperties()
                Dim tableStyle As New TableStyle() With {.Val = "TableGrid"}
                ' Hacer que el ancho de la tabla sea 100% del ancho de la página.
                Dim tableWidth As New TableWidth() With {.Width = "5000", .Type = TableWidthUnitValues.Pct}
                ' Aplicar
                tableProp.Append(tableStyle, tableWidth)
                tabla.AppendChild(tableProp)
                Dim TablaGrid As New TableGrid
                For liCiclo As Integer = 0 To vdtDataTable.Columns.Count
                    TablaGrid.Append(New GridColumn())
                Next
                tabla.AppendChild(TablaGrid)
                ' Crear 1 fila a la tabla.
                Dim tablarow As New TableRow()
                Dim tablacell As TableCell
                'Crear la tabla con la 1ª fila
                For col As Int32 = 1 To vdtDataTable.Columns.Count
                    tablacell = New TableCell(New Paragraph(New Run(New Text(vdtDataTable.Columns(col - 1).ColumnName))))
                    tablarow.Append(tablacell)
                Next
                ' Agregar fila a la tabla.
                tabla.AppendChild(tablarow)
                'Agregar la tabla al documento
                body.AppendChild(tabla)
                ' Insertamos las filas en la tabla
                For liFila As Int32 = 0 To vdtDataTable.Rows.Count - 1
                    tablarow = New TableRow
                    For liColumna As Int32 = 0 To vdtDataTable.Columns.Count - 1
                        ' Insertamos el valor de las celdas.
                        tablacell = New TableCell(New Paragraph(New Run(New Text(vdtDataTable.Rows(liFila).Item(liColumna).ToString))))
                        tablarow.Append(tablacell)
                    Next
                    ' Agregar fila a la tabla.
                    tabla.AppendChild(tablarow)
                Next
            End Using
        End Sub
    End Class

    Imagen del Form

    Imagen del Excel

    Imagen del Word

    Un saludo desde Bilbo
    Carlos
    miércoles, 21 de diciembre de 2016 7:00
  • Christian Medellin,

    Intento ser objetivo y no noto ninguna palabra ofensiva de parte de J. Carlos hacia tu persona.

    A ver, los que tomamos algo de nuestro tiempo en apoyar a la comunidad de desarrolladores esperamos como mínimo que el OP disponga de todo lo necesario para ayudarnos a entender el contexto o el problema, imagínate, acudes donde el doctor por una dolencia, te recuestas en la camilla y atinas únicamente a decir: "atiéndame estoy mal"; ayudará mas si cuentas al doctor acerca de tus dolencias, mostrar tu historial clínico, contar si sufres de alguna enfermedad, indicar si tomas medicamentos, etc., ¿verdad?, pasa lo mismo aquí, sí sólo adjuntas un cuadro de mensaje sin mayor información ni tampoco muestras el código que tienes, ¿cómo saber que estas equivocando?, no lo tomes a mal pero ninguno de los que apoyamos en el foro conocemos de los proyectos de cada uno de ustedes, no asumas que debemos tener claro lo que haces y el porque de los errores que obtienes, creo que J.Carlos no trato de ofenderte, sólo trata de ayudarte.

    Intentaré apoyar pero fíjate que sólo podré darte especulaciones del problema, si adjuntas el código podré revisar y con mayor probabilidad podré decirte donde fallas. Veo que el nombre de las columnas de tu origen de datos contienen espacios (SELECT ORDEN NO, CLIENTE, FECHA DE PEDIDO), en caso estés poniendo en practica ese ejemplo debes de enmarcar los nombres de las columnas con el símbolo de corchete, es decir: SELECT [ORDEN NO], [CLIENTE], [FECHA DE PEDIDO], ...

    Realiza el cambio y coméntanos como te fue, si el problema persiste ayudará mucho si nos puedes adjuntar el código que tienes escrito.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    jueves, 22 de diciembre de 2016 17:49
  • Christian Medellin,

    De acuerdo, el mensaje de error se lanza en el evento LOAD por lo que creo que mis especulaciones tienen un punto de certeza. Te había comentado que en caso tengas nombres de columnas que contengan espacios en blanco, algún símbolo especial o correspondan a una palabra reservada debes de delimitar con símbolos de apertura y cierre de corchetes: [NOMBRE DE COLUMNA$]:

    Dim lsQuery As String = "SELECT [ORDEN NO], CLIENTE, [FECHA DE PEDIDO], PROVEDOR, [AT N], 
    	[FECHA DE ENTREGA], CANTIDAD, CLAVE, LARGO, ANCHO, ALTO, [BCO KRAFT], [CS DC], UNION, 
    	IMPRESION, [P UNICO], IMPORTE, [SUB-TOTAL], [16%IVA], TOTAL FROM Customers"


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 22 de diciembre de 2016 19:03
  • Christian Medellin,

    El nombre de una tabla o de una columna o de cualquier objeto de base de datos se rigen bajo las mismas reglas de los identificadores, por tanto debes aplicar la misma recomendación para el nombre de la tabla:

    ..., [TOTAL] FROM [ORDENES DE PRODUCIONDATOS]")


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 22 de diciembre de 2016 19:27
  • Christian Medellin,

    El mensaje de error te advierte que existe un error de sintaxis cerca a la cláusula FROM entonces lo que queda es tomarle la palabra e iniciar la búsqueda:

    [ANCHO], [ALTO}, [BCO KRAFT], 

    ¿Lo notaste?, el símbolo de llaves '{}' no es un delimitador permitido (o por lo menos no si aperturas con otro símbolo), cambia por el símbolo de corchete de cierre ]


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 22 de diciembre de 2016 20:34
  • Christian Medellin,

    No hay mas que leer el mensaje de la excepción y revisar la instrucción o bloque de código donde se produce la excepción, el mensaje de error es claro, el parámetro 'path' recibe como argumento Nothing, lo cuál no es válido porque espera una ruta válida.

    jueves, 22 de diciembre de 2016 21:02
  • Hola:
    Perdona si te has molestado por lo de la "BOLA DE CRYSTAL".

    Hemos adelantado bastante al molestarte, pues asi ya pones el codigo con los que estas haciendo y se puede buscar una solucion.
    Te sugiero que cambies la estructura de la tabla ORDENES DE PRODUCIONDATOS pues en la imagen que se ve, todos los campos son del tipo Text Largo cuando tienes fechas, cantidades.
    Un programa con buena codificacion y mala estructura de tablas es mucho peor que un programa con mala codificacion y buena estructura de tablas.

    > no es que no sepa lo que me dices sé muy bien a qué te refieres pero el codigo que me proporcionas no funciona <
    El codigo esta probado antes de postearlo, asi que no es correcto lo que estas diciendo

    Un saludo desde Bilbo
    Carlos

    jueves, 22 de diciembre de 2016 21:45

Todas las respuestas

  • Hola:
    En un Form como el de la imagen, copia y pega el siguiente código

    Option Explicit On
    Option Strict Off
    Imports System.Data.SqlClient
    Imports Spire.Xls
    Imports DocumentFormat.OpenXml.Packaging
    Imports DocumentFormat.OpenXml.Wordprocessing
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Dim lsCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
            Try
                Dim loDataTable As New DataTable
                Dim lsQuery As String = "SELECT CustomerID, CompanyName FROM Customers"
                Using loConexion As New SqlConnection(lsCadenaSQL)
                    Dim loDataAdapter As New SqlDataAdapter(lsQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                End Using
                Me.DataGridView1.DataSource = loDataTable
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
        Private Sub btnExcel_Click(sender As Object, e As EventArgs) Handles btnExcel.Click
            Dim ldtDataTable As DataTable = CType(Me.DataGridView1.DataSource, DataTable).Clone
            For Each Seleccion As DataGridViewRow In DataGridView1.SelectedRows
                ldtDataTable.Rows.Add(ObtenerValoresFila(Seleccion))
            Next
            lP_CreateExcelDoc(ldtDataTable, Application.StartupPath & "\Prueba.xlsx", 1, 1)
        End Sub
        Function ObtenerValoresFila(ByVal fila As DataGridViewRow) As String()
            'Dimensionar el array al tamaño de columnas del DGV
            Dim Contenido(Me.DataGridView1.ColumnCount - 1) As String
            'Rellenar el contenido con el valor de las celdas de la fila
            For Ndx As Integer = 0 To Contenido.Length - 1
                Contenido(Ndx) = CStr(fila.Cells(Ndx).Value)
            Next
            Return Contenido
        End Function
        Private Sub lP_CreateExcelDoc(ByVal vdtDataTable As DataTable, ByVal filepath As String, ByVal fila As Integer, ByVal Columna As Integer)
            Dim workbook As Workbook = New Workbook()
            workbook.CreateEmptySheets(1)
            'Inicializar hoja de cálculo
            Dim sheet As Worksheet = workbook.Worksheets(0)
            sheet.InsertDataTable(vdtDataTable, True, fila, Columna)
            'Guardamos el documento
            workbook.SaveToFile(filepath, ExcelVersion.Version2007)
            System.Diagnostics.Process.Start(filepath)
        End Sub
        Private Sub btnWord_Click(sender As Object, e As EventArgs) Handles btnWord.Click
            Dim lsFichero As String = Application.StartupPath & "\Prueba.docx"
            lP_CreateWordDoc(lsFichero, "")
            Dim ldtDataTable As DataTable = CType(Me.DataGridView1.DataSource, DataTable).Clone
            For Each Seleccion As DataGridViewRow In DataGridView1.SelectedRows
                ldtDataTable.Rows.Add(ObtenerValoresFila(Seleccion))
            Next
            lP_InsertTableInDoc(lsFichero, ldtDataTable)
            System.Diagnostics.Process.Start(lsFichero)
        End Sub
        Private Sub lP_CreateWordDoc(ByVal filepath As String, ByVal msg As String)
            Using doc As WordprocessingDocument = WordprocessingDocument.Create(filepath, DocumentFormat.OpenXml.WordprocessingDocumentType.Document)
                ' Añadir una pieza del documento principal.
                Dim mainPart As MainDocumentPart = doc.AddMainDocumentPart()
                ' Cree la estructura del documento y añada algún texto.
                mainPart.Document = New Document()
                Dim body As Body = mainPart.Document.AppendChild(New Body())
                Dim para As Paragraph = body.AppendChild(New Paragraph())
                Dim run As Run = para.AppendChild(New Run())
                ' String msg contiene el texto
                run.AppendChild(New Text(msg))
            End Using
        End Sub

        Private Sub lP_InsertTableInDoc(ByVal filepath As String, ByVal vdtDataTable As DataTable)
            ' Abra un WordprocessingDocument para editarlo usando el path de archivo.
            Using wordprocessingDocument As WordprocessingDocument = wordprocessingDocument.Open(filepath, True)
                ' Asignar una referencia al cuerpo de documento existente.
                Dim body As Body = wordprocessingDocument.MainDocumentPart.Document.Body
                ' Crear una tabla.
                Dim tabla As New Table()
                ' Establecer el estilo y el ancho de la tabla.
                Dim tableProp As New TableProperties()
                Dim tableStyle As New TableStyle() With {.Val = "TableGrid"}
                ' Hacer que el ancho de la tabla sea 100% del ancho de la página.
                Dim tableWidth As New TableWidth() With {.Width = "5000", .Type = TableWidthUnitValues.Pct}
                ' Aplicar
                tableProp.Append(tableStyle, tableWidth)
                tabla.AppendChild(tableProp)
                Dim TablaGrid As New TableGrid
                For liCiclo As Integer = 0 To vdtDataTable.Columns.Count
                    TablaGrid.Append(New GridColumn())
                Next
                tabla.AppendChild(TablaGrid)
                ' Crear 1 fila a la tabla.
                Dim tablarow As New TableRow()
                Dim tablacell As TableCell
                'Crear la tabla con la 1ª fila
                For col As Int32 = 1 To vdtDataTable.Columns.Count
                    tablacell = New TableCell(New Paragraph(New Run(New Text(vdtDataTable.Columns(col - 1).ColumnName))))
                    tablarow.Append(tablacell)
                Next
                ' Agregar fila a la tabla.
                tabla.AppendChild(tablarow)
                'Agregar la tabla al documento
                body.AppendChild(tabla)
                ' Insertamos las filas en la tabla
                For liFila As Int32 = 0 To vdtDataTable.Rows.Count - 1
                    tablarow = New TableRow
                    For liColumna As Int32 = 0 To vdtDataTable.Columns.Count - 1
                        ' Insertamos el valor de las celdas.
                        tablacell = New TableCell(New Paragraph(New Run(New Text(vdtDataTable.Rows(liFila).Item(liColumna).ToString))))
                        tablarow.Append(tablacell)
                    Next
                    ' Agregar fila a la tabla.
                    tabla.AppendChild(tablarow)
                Next
            End Using
        End Sub
    End Class

    P.D. Tienes que añadir las referencias de la siguiente imagen

    Un saludo desde Bilbo
    Carlos

    lunes, 19 de diciembre de 2016 22:27
  • Ya coloque el código el código como me indicaste lo unico que cambie fue el nombre del "DataGridView" y este código

    Dim lsQuery As String = "SELECT CustomerID, CompanyName FROM Customers"
    
    a este 
    
    Dim lsQuery As String = ("SELECT ORDEN NO, CLIENTE, FECHA DE PEDIDO, PROVEDOR, AT N, FECHA DE ENTREGA, CANTIDAD, CLAVE, LARGO, ANCHO, ALTO, BCO KRAFT, CS DC, UNION, IMPRESION, P UNICO, IMPORTE, SUB-TOTAL , 16%IVA, TOTAL FROM Customers")

    y me sale el siguiente error al cargar el formulario

    ademas de este error cuando doy click en el botón de " Exportar a Excel" o " Exportar a Word"

    "Botón Exportar a Excel"

    "Botón Exportar a Word"



    martes, 20 de diciembre de 2016 16:57
  • Hola:

    > Dim lsCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True" <
    Con esta linea, estoy definiendo la cadena de conexion es decir que me voy a conectar a una instancia local de SQL Server llamada SQLEXPRESS y a la base de datos Northwind.
    Tu en esa cadena de conexion tendras que poner la instancia y la base de datos. Si la instancia no es local, esta debera admitir conexiones remotas.Esto si quieres usar SQL Server porque no has dicho todavia cual es el motor de base de datos que estas usando.
    > Dim lsQuery As String = ("SELECT ORDEN NO, CLIENTE, FECHA DE PEDIDO, PROVEDOR, AT N, FECHA DE ENTREGA, CANTIDAD, CLAVE, LARGO, ANCHO, ALTO, BCO KRAFT, CS DC, UNION, IMPRESION, P UNICO, IMPORTE, SUB-TOTAL , 16%IVA, TOTAL FROM Customers") <
    Estas usando una consulta con campos de tu tabla y pones otra tabla (Customers) que no tiene dichos campos
    ¿Porque no pones el motor que usas y las estructuras de las tablas implicadas?

    Un saludo desde Bilbo
    Carlos


    martes, 20 de diciembre de 2016 21:07
  • EL MOTOR DE LA BASE DE DATOS QUE USO ES "ACCES" JEJEJ GRACIAS, ME FALTO ESE DETALLE

    martes, 20 de diciembre de 2016 21:20
  • Hola:
    Ya que te "RESISTES" a poner la estructura de la tabla, para el ejemplo voy a usar la tabla Customers de la base de datos Northwind
    El codigo es el siguiente
    Option Explicit On
    Option Strict Off
    Imports System.Data.OleDb
    Imports Spire.Xls
    Imports DocumentFormat.OpenXml.Packaging
    Imports DocumentFormat.OpenXml.Wordprocessing
    Imports System.IO
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Dim lsCadenaAccess As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\Northwind.accdb"
            Try
                Dim loDataTable As New DataTable
                Dim lsQuery As String = "SELECT CustomerID, CompanyName, ContactName FROM Customers"
                Using loConexion As New OleDbConnection(lsCadenaAccess)
                    Dim loDataAdapter As New OleDbDataAdapter(lsQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                End Using
                Me.DataGridView1.DataSource = loDataTable
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
        Private Sub btnExcel_Click(sender As Object, e As EventArgs) Handles btnExcel.Click
            Dim ldtDataTable As DataTable = CType(Me.DataGridView1.DataSource, DataTable).Clone
            For Each Seleccion As DataGridViewRow In DataGridView1.SelectedRows
                ldtDataTable.Rows.Add(ObtenerValoresFila(Seleccion))
            Next
            lP_CreateExcelDoc(ldtDataTable, Me.txtPath.Text, 1, 1)
        End Sub
        Function ObtenerValoresFila(ByVal fila As DataGridViewRow) As String()
            'Dimensionar el array al tamaño de columnas del DGV
            Dim Contenido(Me.DataGridView1.ColumnCount - 1) As String
            'Rellenar el contenido con el valor de las celdas de la fila
            For Ndx As Integer = 0 To Contenido.Length - 1
                Contenido(Ndx) = CStr(fila.Cells(Ndx).Value)
            Next
            Return Contenido
        End Function
        Private Sub lP_CreateExcelDoc(ByVal vdtDataTable As DataTable, ByVal filepath As String, ByVal fila As Integer, ByVal Columna As Integer)
            Dim workbook As Workbook = New Workbook()
            workbook.CreateEmptySheets(1)
            'Inicializar hoja de cálculo
            Dim sheet As Worksheet = workbook.Worksheets(0)
            sheet.InsertDataTable(vdtDataTable, True, fila, Columna)
            'Guardamos el documento
            workbook.SaveToFile(filepath, ExcelVersion.Version2007)
            System.Diagnostics.Process.Start(filepath)
        End Sub
        Private Sub btnWord_Click(sender As Object, e As EventArgs) Handles btnWord.Click
            lP_CreateWordDoc(Me.txtPath.Text, "")
            Dim ldtDataTable As DataTable = CType(Me.DataGridView1.DataSource, DataTable).Clone
            For Each Seleccion As DataGridViewRow In DataGridView1.SelectedRows
                ldtDataTable.Rows.Add(ObtenerValoresFila(Seleccion))
            Next
            lP_InsertTableInDoc(Me.txtPath.Text, ldtDataTable)
            System.Diagnostics.Process.Start(Me.txtPath.Text)
        End Sub
        Private Sub lP_CreateWordDoc(ByVal filepath As String, ByVal msg As String)
            Using doc As WordprocessingDocument = WordprocessingDocument.Create(filepath, DocumentFormat.OpenXml.WordprocessingDocumentType.Document)
                ' Añadir una pieza del documento principal.
                Dim mainPart As MainDocumentPart = doc.AddMainDocumentPart()
                ' Cree la estructura del documento y añada algún texto.
                mainPart.Document = New Document()
                Dim body As Body = mainPart.Document.AppendChild(New Body())
                Dim para As Paragraph = body.AppendChild(New Paragraph())
                Dim run As Run = para.AppendChild(New Run())
                ' String msg contiene el texto
                run.AppendChild(New Text(msg))
            End Using
        End Sub
        Private Sub lP_InsertTableInDoc(ByVal filepath As String, ByVal vdtDataTable As DataTable)
            ' Abra un WordprocessingDocument para editarlo usando el path de archivo.
            Using wordprocessingDocument As WordprocessingDocument = wordprocessingDocument.Open(filepath, True)
                ' Asignar una referencia al cuerpo de documento existente.
                Dim body As Body = wordprocessingDocument.MainDocumentPart.Document.Body
                ' Crear una tabla.
                Dim tabla As New Table()
                ' Establecer el estilo y el ancho de la tabla.
                Dim tableProp As New TableProperties()
                Dim tableStyle As New TableStyle() With {.Val = "TableGrid"}
                ' Hacer que el ancho de la tabla sea 100% del ancho de la página.
                Dim tableWidth As New TableWidth() With {.Width = "5000", .Type = TableWidthUnitValues.Pct}
                ' Aplicar
                tableProp.Append(tableStyle, tableWidth)
                tabla.AppendChild(tableProp)
                Dim TablaGrid As New TableGrid
                For liCiclo As Integer = 0 To vdtDataTable.Columns.Count
                    TablaGrid.Append(New GridColumn())
                Next
                tabla.AppendChild(TablaGrid)
                ' Crear 1 fila a la tabla.
                Dim tablarow As New TableRow()
                Dim tablacell As TableCell
                'Crear la tabla con la 1ª fila
                For col As Int32 = 1 To vdtDataTable.Columns.Count
                    tablacell = New TableCell(New Paragraph(New Run(New Text(vdtDataTable.Columns(col - 1).ColumnName))))
                    tablarow.Append(tablacell)
                Next
                ' Agregar fila a la tabla.
                tabla.AppendChild(tablarow)
                'Agregar la tabla al documento
                body.AppendChild(tabla)
                ' Insertamos las filas en la tabla
                For liFila As Int32 = 0 To vdtDataTable.Rows.Count - 1
                    tablarow = New TableRow
                    For liColumna As Int32 = 0 To vdtDataTable.Columns.Count - 1
                        ' Insertamos el valor de las celdas.
                        tablacell = New TableCell(New Paragraph(New Run(New Text(vdtDataTable.Rows(liFila).Item(liColumna).ToString))))
                        tablarow.Append(tablacell)
                    Next
                    ' Agregar fila a la tabla.
                    tabla.AppendChild(tablarow)
                Next
            End Using
        End Sub
    End Class

    Imagen del Form

    Imagen del Excel

    Imagen del Word

    Un saludo desde Bilbo
    Carlos
    miércoles, 21 de diciembre de 2016 7:00
  • Me sale este error a que se debe
    miércoles, 21 de diciembre de 2016 16:29
  • Hola:

    ??????????????

    Un saludo desde Bilbo
    Carlos

    miércoles, 21 de diciembre de 2016 19:59
  • ESE ERROR ME SALE AL CARGAR EL FORMULARIO
    miércoles, 21 de diciembre de 2016 20:03
  • Hola:

    Tengo la "BOLA DE CRYSTAL" reparando en el taller.
    Si no pones el codigo para que se vea lo que estas ejecutando, hasta que no me arreglen la bola, NO te puedo ayudar.
    ¿Has probado el ejemplo tal cual te lo he puesto?
    Si lo pruebas, veras como funciona y ya solo lo tendras que adaptar a tus necesidades

    Un saludo desde Bilbo
    Carlos
    jueves, 22 de diciembre de 2016 7:44
  • Disculpame por desesperarte? hecho todo exactamente como me lo dices y después modificarlo a mis necesidades pero me da ese error 

    no es que no sepa lo que me dices sé muy bien a qué te refieres pero el codigo que me proporcionas no funciona.. yo te he hablado con respeto, asi que te pido lo mismo a cambio, si ya te desespere y no sabes a que se refiere ese error mejor dímelo que no sabes y ya, no que me estés diciendo incoherencias cuando yo te estoy hablando bien 

    ¿Se supone que este es un sitio es donde nos podemos ayudar mutuamente para poder mejorar en el mundo de la programación? ... no para insultarnos y ver quien gana..   

    jueves, 22 de diciembre de 2016 16:15
  • Christian Medellin,

    Intento ser objetivo y no noto ninguna palabra ofensiva de parte de J. Carlos hacia tu persona.

    A ver, los que tomamos algo de nuestro tiempo en apoyar a la comunidad de desarrolladores esperamos como mínimo que el OP disponga de todo lo necesario para ayudarnos a entender el contexto o el problema, imagínate, acudes donde el doctor por una dolencia, te recuestas en la camilla y atinas únicamente a decir: "atiéndame estoy mal"; ayudará mas si cuentas al doctor acerca de tus dolencias, mostrar tu historial clínico, contar si sufres de alguna enfermedad, indicar si tomas medicamentos, etc., ¿verdad?, pasa lo mismo aquí, sí sólo adjuntas un cuadro de mensaje sin mayor información ni tampoco muestras el código que tienes, ¿cómo saber que estas equivocando?, no lo tomes a mal pero ninguno de los que apoyamos en el foro conocemos de los proyectos de cada uno de ustedes, no asumas que debemos tener claro lo que haces y el porque de los errores que obtienes, creo que J.Carlos no trato de ofenderte, sólo trata de ayudarte.

    Intentaré apoyar pero fíjate que sólo podré darte especulaciones del problema, si adjuntas el código podré revisar y con mayor probabilidad podré decirte donde fallas. Veo que el nombre de las columnas de tu origen de datos contienen espacios (SELECT ORDEN NO, CLIENTE, FECHA DE PEDIDO), en caso estés poniendo en practica ese ejemplo debes de enmarcar los nombres de las columnas con el símbolo de corchete, es decir: SELECT [ORDEN NO], [CLIENTE], [FECHA DE PEDIDO], ...

    Realiza el cambio y coméntanos como te fue, si el problema persiste ayudará mucho si nos puedes adjuntar el código que tienes escrito.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    jueves, 22 de diciembre de 2016 17:49
  • Si lo entiendo y créeme que en eso estoy mas que de acuerdo contigo

    lo único que me molesto fue esto

    "Tengo la "BOLA DE CRYSTAL" reparando en el taller.
    Si no pones el codigo para que se vea lo que estás ejecutando, hasta que no me arreglen la bola, NO te puedo ayudar."

    se que se están tomando mucho de su valioso tiempo para responderme y lo agradezco pero pz yo creo que hay maneras de decirlo, es lo único en fuera de lo demás esta todo bien y bueno de antemano te agradesco mucho mi codigo es el siguiente..

    Option Explicit On
    Option Strict Off
    Imports System.Data.OleDb
    Imports Spire.Xls
    Imports DocumentFormat.OpenXml.Packaging
    
     Private Sub ORDENESDEPRODUCIONINFORMACION_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            Dim lsCadenaAccess As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\ORDENES DE PRODUCIONDATOS.mdb"
            Try
                Dim loDataTable As New DataTable
                Dim lsQuery As String = ("SELECT ORDEN NO, CLIENTE, FECHA DE PEDIDO, PROVEDOR, AT N, FECHA DE ENTREGA, CANTIDAD, CLAVE, LARGO, ANCHO, ALTO, BCO KRAFT, CS DC, UNION, IMPRESION, P UNICO, IMPORTE, SUB-TOTAL , 16%IVA, TOTAL FROM Customers")
    
                Using loConexion As New OleDbConnection(lsCadenaAccess)
                    Dim loDataAdapter As New OleDbDataAdapter(lsQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                End Using
                Me.ORDENES_DE_PRODUCIONDATOSDataGridView.DataSource = loDataTable
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
    
        End Sub
    
        Function ObtenerValoresFila(ByVal fila As DataGridViewRow) As String()
            'Dimensionar el array al tamaño de columnas del DGV
            Dim Contenido(Me.ORDENES_DE_PRODUCIONDATOSDataGridView.ColumnCount - 1) As String
            'Rellenar el contenido con el valor de las celdas de la fila
            For Ndx As Integer = 0 To Contenido.Length - 1
                Contenido(Ndx) = CStr(fila.Cells(Ndx).Value)
            Next
            Return Contenido
        End Function
    
     Private Sub lP_CreateExcelDoc(ByVal vdtDataTable As DataTable, ByVal filepath As String, ByVal fila As Integer, ByVal Columna As Integer)
            Dim workbook As Workbook = New Workbook()
            workbook.CreateEmptySheets(1)
            'Inicializar hoja de cálculo
            Dim sheet As Worksheet = workbook.Worksheets(0)
            sheet.InsertDataTable(vdtDataTable, True, fila, Columna)
            'Guardamos el documento
            workbook.SaveToFile(filepath, ExcelVersion.Version2007)
            System.Diagnostics.Process.Start(filepath)
        End Sub
    
        Private Sub BOTONEXPORTARAEXCEL_Click(sender As Object, e As EventArgs) Handles BOTONEXPORTARAEXCEL.Click
            Dim ldtDataTable As DataTable = CType(Me.ORDENES_DE_PRODUCIONDATOSDataGridView.DataSource, DataTable).Clone
            For Each Seleccion As DataGridViewRow In ORDENES_DE_PRODUCIONDATOSDataGridView.SelectedRows
                ldtDataTable.Rows.Add(ObtenerValoresFila(Seleccion))
            Next
            lP_CreateExcelDoc(ldtDataTable, Me.TextBox1.Text, 1, 1)
        End Sub
    
        Private Sub BOTONEXPORTARAWORD_Click(sender As Object, e As EventArgs) Handles BOTONEXPORTARAWORD.Click
    
            lP_CreateWordDoc(Me.TextBox1.Text, "")
            Dim ldtDataTable As DataTable = CType(Me.ORDENES_DE_PRODUCIONDATOSDataGridView.DataSource, DataTable).Clone
            For Each Seleccion As DataGridViewRow In ORDENES_DE_PRODUCIONDATOSDataGridView.SelectedRows
                ldtDataTable.Rows.Add(ObtenerValoresFila(Seleccion))
            Next
            lP_InsertTableInDoc(Me.TextBox1.Text, ldtDataTable)
            System.Diagnostics.Process.Start(Me.TextBox1.Text)
        End Sub
    
        Private Sub lP_CreateWordDoc(ByVal filepath As String, ByVal msg As String)
            Using doc As WordprocessingDocument = WordprocessingDocument.Create(filepath, DocumentFormat.OpenXml.WordprocessingDocumentType.Document)
                ' Añadir una pieza del documento principal. 
                Dim mainPart As MainDocumentPart = doc.AddMainDocumentPart()
                ' Cree la estructura del documento y añada algún texto.
                mainPart.Document = New Document()
                Dim body As Body = mainPart.Document.AppendChild(New Body())
                Dim para As Paragraph = body.AppendChild(New Paragraph())
                Dim run As Run = para.AppendChild(New Run())
                ' String msg contiene el texto
                run.AppendChild(New Text(msg))
            End Using
        End Sub
    
        Private Sub lP_InsertTableInDoc(ByVal filepath As String, ByVal vdtDataTable As DataTable)
            ' Abra un WordprocessingDocument para editarlo usando el path de archivo.
            Using wordprocessingDocument As WordprocessingDocument = WordprocessingDocument.Open(filepath, True)
                ' Asignar una referencia al cuerpo de documento existente.
                Dim body As Body = wordprocessingDocument.MainDocumentPart.Document.Body
                ' Crear una tabla.
                Dim tabla As New Table()
                ' Establecer el estilo y el ancho de la tabla.
                Dim tableProp As New TableProperties()
                Dim tableStyle As New TableStyle() With {.Val = "TableGrid"}
                ' Hacer que el ancho de la tabla sea 100% del ancho de la página.
                Dim tableWidth As New TableWidth() With {.Width = "5000", .Type = TableWidthUnitValues.Pct}
                ' Aplicar
                tableProp.Append(tableStyle, tableWidth)
                tabla.AppendChild(tableProp)
                Dim TablaGrid As New TableGrid
                For liCiclo As Integer = 0 To vdtDataTable.Columns.Count
                    TablaGrid.Append(New GridColumn())
                Next
                tabla.AppendChild(TablaGrid)
                ' Crear 1 fila a la tabla.
                Dim tablarow As New TableRow()
                Dim tablacell As TableCell
                'Crear la tabla con la 1ª fila
                For col As Int32 = 1 To vdtDataTable.Columns.Count
                    tablacell = New TableCell(New Paragraph(New Run(New Text(vdtDataTable.Columns(col - 1).ColumnName))))
                    tablarow.Append(tablacell)
                Next
                ' Agregar fila a la tabla.
                tabla.AppendChild(tablarow)
                'Agregar la tabla al documento
                body.AppendChild(tabla)
                ' Insertamos las filas en la tabla
                For liFila As Int32 = 0 To vdtDataTable.Rows.Count - 1
                    tablarow = New TableRow
                    For liColumna As Int32 = 0 To vdtDataTable.Columns.Count - 1
                        ' Insertamos el valor de las celdas.
                        tablacell = New TableCell(New Paragraph(New Run(New Text(vdtDataTable.Rows(liFila).Item(liColumna).ToString))))
                        tablarow.Append(tablacell)
                    Next
                    ' Agregar fila a la tabla.
                    tabla.AppendChild(tablarow)
                Next
            End Using
        End Sub

    y al cargarlo me sale el siguiente error


    jueves, 22 de diciembre de 2016 18:48
  • Christian Medellin,

    De acuerdo, el mensaje de error se lanza en el evento LOAD por lo que creo que mis especulaciones tienen un punto de certeza. Te había comentado que en caso tengas nombres de columnas que contengan espacios en blanco, algún símbolo especial o correspondan a una palabra reservada debes de delimitar con símbolos de apertura y cierre de corchetes: [NOMBRE DE COLUMNA$]:

    Dim lsQuery As String = "SELECT [ORDEN NO], CLIENTE, [FECHA DE PEDIDO], PROVEDOR, [AT N], 
    	[FECHA DE ENTREGA], CANTIDAD, CLAVE, LARGO, ANCHO, ALTO, [BCO KRAFT], [CS DC], UNION, 
    	IMPRESION, [P UNICO], IMPORTE, [SUB-TOTAL], [16%IVA], TOTAL FROM Customers"


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 22 de diciembre de 2016 19:03
  • Perfecto de echo hice lo que me pediste y me quedo algo asi:

    "Dim lsQuery As String = ("SELECT [ORDEN NO], [CLIENTE], [FECHA DE PEDIDO], [PROVEDOR], [AT N], [FECHA DE ENTREGA], [CANTIDAD], [CLAVE], [LARGO], [ANCHO], [ALTO}, [BCO KRAFT], [CS DC], [UNION], [IMPRESION], [P UNICO], [IMPORTE], [SUB-TOTAL] , [16%IVA], [TOTAL] FROM ORDENES DE PRODUCIONDATOS")"

    DESPUES "

    Customers"

    " LO CAMBIE POR "ORDENES DE PRODUCIONDATOS" QUE ASI SE LLAMA MI TABLA DE MI BASE DE DATOS CON EL MISMO NOMBRE

    Y ME SALE AHORA EL SIGUIENTE ERROR



    jueves, 22 de diciembre de 2016 19:16
  • Christian Medellin,

    El nombre de una tabla o de una columna o de cualquier objeto de base de datos se rigen bajo las mismas reglas de los identificadores, por tanto debes aplicar la misma recomendación para el nombre de la tabla:

    ..., [TOTAL] FROM [ORDENES DE PRODUCIONDATOS]")


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 22 de diciembre de 2016 19:27
  • Willams Morales


    Dim lsQuery As String = "SELECT [ORDEN NO],
    [CLIENTE], [FECHA DE PEDIDO], [PROVEDOR], 
    [AT N], [FECHA DE ENTREGA], [CANTIDAD],
    [CLAVE], [LARGO], [ANCHO], [ALTO}, [BCO KRAFT], 
    [CS DC], [UNION], [IMPRESION], [P UNICO], 
    [IMPORTE], [SUB-TOTAL] , [16%IVA], [TOTAL] 
    FROM [ORDENES DE PRODUCIONDATOS]"

    YA LO CORREGI COMO ME INDICASTE Y VAS A DECIR QUE A UN SIGO DE NECIO PERO A UN ME SALE EL ERROR

    LA IMAGEN QUE TE MOSTRARE A CONTINUACIÓN BAS A VER CLARO EL NOMBRE DE MI TABLA Y EN EL TITULO QUE SON LOS MISMOS QUE PONGO EN EL CODIGO

    EL FORMATO DE MI TABLA ES "ORDENES DE PRODUCIONDATOS.mdb"

    y ya lo combie de este codigo

      Dim lsCadenaAccess As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\Northwind.accdb"

    a este otro

      Dim lsCadenaAccess As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\ORDENES DE PRODUCIONDATOS.mdb"
    entonces que es lo que puede estar mal



    jueves, 22 de diciembre de 2016 19:42
  • Christian Medellin,

    El mensaje de error te advierte que existe un error de sintaxis cerca a la cláusula FROM entonces lo que queda es tomarle la palabra e iniciar la búsqueda:

    [ANCHO], [ALTO}, [BCO KRAFT], 

    ¿Lo notaste?, el símbolo de llaves '{}' no es un delimitador permitido (o por lo menos no si aperturas con otro símbolo), cambia por el símbolo de corchete de cierre ]


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 22 de diciembre de 2016 20:34
  • Willams Morales

    NO LA VERDAD NO LO NOTE PERO GRACIAS POR EL DATO YA QUEDO CORREGIDO Y YA NO ME SALE ESE ERROR AHORA CUANDO QUIERO EXPORTAR A "EXCEL" O "WORD" ME SALE ESTE ERROR CUANDO DOY CLICK EN UN DE ELLOS..

    jueves, 22 de diciembre de 2016 20:40
  • Christian Medellin,

    No hay mas que leer el mensaje de la excepción y revisar la instrucción o bloque de código donde se produce la excepción, el mensaje de error es claro, el parámetro 'path' recibe como argumento Nothing, lo cuál no es válido porque espera una ruta válida.

    jueves, 22 de diciembre de 2016 21:02
  • Hola:
    Perdona si te has molestado por lo de la "BOLA DE CRYSTAL".

    Hemos adelantado bastante al molestarte, pues asi ya pones el codigo con los que estas haciendo y se puede buscar una solucion.
    Te sugiero que cambies la estructura de la tabla ORDENES DE PRODUCIONDATOS pues en la imagen que se ve, todos los campos son del tipo Text Largo cuando tienes fechas, cantidades.
    Un programa con buena codificacion y mala estructura de tablas es mucho peor que un programa con mala codificacion y buena estructura de tablas.

    > no es que no sepa lo que me dices sé muy bien a qué te refieres pero el codigo que me proporcionas no funciona <
    El codigo esta probado antes de postearlo, asi que no es correcto lo que estas diciendo

    Un saludo desde Bilbo
    Carlos

    jueves, 22 de diciembre de 2016 21:45
  • Lo siento por tardar en contestar lo que pasa es que no tuve para pagar mi internet pero gracias por todo a los dos y ntp suele pasar fue un error solamente todos cometemos errores

    jueves, 29 de diciembre de 2016 21:31