Neste artigo vou mostrar como copiar e colar dados de uma planilha Excel em um controle GridView em uma aplicação ASP .NET. |
Eu já escrevi alguns artigos sobre a transferência de dados do Excel para o GridView e vice-versa e hoje veremos como copiar ( CTRL+C ) dados em uma planilha Excel e colar (CTRL+V) os dados em um GridView. Para realizar essa tarefa vou usar os recursos da classe ClipBoard do namespace System.Windows.Forms. |
Para colocar dados na área de transferência usamos o método - SetDataObject.
Existem dois métodos sobrecarregados:
1 - Clipboard.SetDataObject Method (Object) - Os dados colocados no clipboard serão excluídos quando a aplicação terminar.
2- Clipboard.SetDataObject Method (object, boolean) - onde temos os parâmetros
Para obter dados do clipboard usamos o método GetDataObject. Os dados são retornado como um objeto que implementa a interface IDataObject pois o tipo de dados pode variar.
Usamos então os métodos definidos em IDataObject para extrair os dados do objeto.
Se você não souber o formato dos dados a serem obtidos use o método GetFormats da interface IDataObject para obter uma lista de formatos; a seguir use o método GetData e especifique o formato que sua aplicação quer usar.
Recursos usados:
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
Criando a solução no VS 2015
Abra o Visual Studio Community 2015 e clique em New Project;
Selecione Visual C# e clique em Web;
Você verá a janela abaixo exibindo dois novos tipos de projetos web:
Selecione o template Empty e marque a opção WebForms de forma a criar uma solução vazia.
A seguir no menu Project clique em Add New Item e selecione o template Web Form informando o nome Default.aspx:
A partir da ToolBox inclua no arquivo Default.aspx os controles :
Disponha os controles conforme o leiaute da figura abaixo:
O código gerado pode ser visto a seguir:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="GridView_CopiarColarExcel._Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>Macoratti .net</h1>
<hr />
<asp:GridView ID="gvDados" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="30" />
<asp:BoundField DataField="Nome" HeaderText="Nome" ItemStyle-Width="150" />
<asp:BoundField DataField="Pais" HeaderText="Pais" ItemStyle-Width="150" />
</Columns>
</asp:GridView>
<br />
<asp:TextBox ID="txtCopiado" runat="server" TextMode="MultiLine" AutoPostBack="true"
OnTextChanged="ColarParaGridView" Height="200" Width="400" />
</div>
</form>
</body>
</html>
|
Vamos implementar o código javascript no evento onload definindo entre as tags <head> do arquivo Default.aspx o código a seguir:
... <head runat="server"> <title>Copiar Colar - Excel-GridView</title> <script type="text/javascript">
window.onload = function () {
document.getElementById("<%=txtCopiado.ClientID %>").onpaste = function () {
var txt = this;
setTimeout(function () {
__doPostBack(txt.name, '');
}, 100);
}
};
</script>
</head>
...
|
Dessa forma assim que colarmos alguma coisa o evento PostBack será acionado e o evento OnTextChanged do TextBox será disparado.
Populando o GridView com os dados copiados do Excel
Vamos definir agora o código no arquivo code-behind Default.aspx.vb para o método ColarParaGridView de forma que assim que algo for colado no TextBox o evento será disparado.
Protected Sub ColarParaGridView(sender As Object, e As EventArgs) Handles txtCopiado.TextChanged Dim dt As New DataTable()
dt.Columns.AddRange(New DataColumn(2) {New DataColumn("Id", GetType(Integer)),
New DataColumn("Nome", GetType(String)),
New DataColumn("Pais", GetType(String))})
Dim conteudoCopiado As String = Request.Form(txtCopiado.UniqueID)
For Each linha As String In conteudoCopiado.Split(ControlChars.Lf)
If Not String.IsNullOrEmpty(linha) Then
dt.Rows.Add()
Dim i As Integer = 0
For Each celula As String In linha.Split(ControlChars.Tab)
dt.Rows(dt.Rows.Count - 1)(i) = celula
i += 1
Next
End If
Next
gvDados.DataSource = dt
gvDados.DataBind()
txtCopiado.Text = ""
End Sub
|
Depois percorremos os dados salvando no DataTable.
Ao final exibimos o conteúdo do DataTable no gridview.
Agora é só alegria...
Abra uma planilha Excel e copie os dados de uma planilha conforme abaixo usando um CTRL + C:
Execute o projeto ASP .NET e a seguir cole os dados no TextBox usando CTRL+V:
Pegue o projeto completo aqui : GridView_CopiarColarExcel.zip
"Verdadeiramente ele (Jesus) tomou sobre
si as nossas enfermidades, e as nossas dores levou sobre si; e nós o reputávamos
por aflito, ferido de Deus, e oprimido."
Isaías 53:4
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
.NET - Dicas de site com livros gratuitos para estudo - Macoratti.net
ASP .NET - Exportando Excel para GridView e ... - Macoratti.ne