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
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
Gracias por el aporte...
ResponderEliminarUna duda como hago para pegar lo copiado a otro DataGridView
Encontré la respuesta en el link...
ResponderEliminarhttp://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
gracias a ti... por el aporte
ResponderEliminar