Copiar contenido Datagridview al portapapeles

Ha resultado curioso alguna vez donde tenemos nuestra tabla datagridview y deseamos ccopiar el contenido en el portapapeles y pegarlo en Excel?..Bueno creo a todos se les a ocurrido. En esta entrada vamos a dedicarnos a copiar haciendo clic derecho sobre la tabla y pegar en la superficie de excel tal como se halla originalmente  su contenido. Primeramente creamos las columnas del datagridview que puede ser como muestra mi captura



Rellenamos el grid como la captura de arriba:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'GENERAR Y RELLENAR EL DATAGRIDVIEW
        Try
            Dim n As Integer = 6 ' cualquier valor para sumar
            Dim cantidad(n) As Integer 'matriz para almacenar hasta n valores
            Dim valor As Double = 0.18 'valor de un articulo en común ....para ejemplificar
            Dim subtotal(n) As Double ' matriz que almacena los subtotales de cada compra
            Dim suma As Double 'total de la suma de la columna subtotal
            For i As Integer = 0 To n - 1
                cantidad(i) = i 'Val(InputBox("Ingresar cantidad Nº" & i + 1)) 'Entrada manual
            Next
            For i As Integer = 0 To n - 1
                subtotal(i) = cantidad(i) * valor
                suma = suma + subtotal(i)
            Next
            grid1.Rows.Add(n + 1) 'numero de filas del grid
            For r As Integer = 0 To n - 1
                grid1.Item(0, r).Value = r + 1
                grid1.Item(1, r).Value = Format(cantidad(r), "0.00")
                grid1.Item(2, r).Value = Format(valor, "0.00")
                grid1.Item(3, r).Value = Format(subtotal(r), "0.00")
                grid1.Item(2, n).Value = "TOTALES="
                grid1.Item(3, n).Value = Format(suma, "0.00")
            Next
        Catch ex As KeyNotFoundException
            MessageBox.Show("Error de concurrencia:" & vbCrLf & ex.Message)
        End Try
    End Sub
Creamos el menu para hacer click derecho y copiar las filas al portapapeles y porterior a Excel:
necesitamos el control: ContextMenuStrip1


y sincronizamos con el datagridview sobre las propiedades de éste:



Al final el codigo sobre el menu Copiar filas:
 Private Sub CopiarFilasToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopiarFilasToolStripMenuItem.Click
        If grid1.GetCellCount( _
            DataGridViewElementStates.Selected) > 0 Then
            Try
                ' Agregar seleccion a clipboard
                Clipboard.SetDataObject( _
                  grid1.GetClipboardContent())
                '   Me.TextBox1.Text = Clipboard.GetText() 'Por si quiren presentarlo en texto(asignar propiedad multiline = true).
            Catch ex As System.Runtime.InteropServices.ExternalException
            End Try

        End If
    End Sub
Listo generamos, selecionando las filas del grid que deseamos y copiamos en excel:
Mi ejemplo:
https://docs.google.com/open?id=0B-UGWA03tc5ZUFc1SG1jV3I1Nnc

Comentarios

  1. Gracias por el aporte...
    Una duda como hago para pegar lo copiado a otro DataGridView

    ResponderEliminar
  2. Encontré la respuesta en el link...

    http://seanconnolly.com/archive/2008/05/18/how-to-paste-data-from-clipboard-to-datagridview-in-visual-basic.net.aspx.aspx

    Espero que ayude en algo

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Imprimir directamente ReportViewer a impresora predeterminada

DevComponents DotnetBar 12.5.0.2

Metodo Iterativo Gauss-Seidel en Visual Basic