EXPORTACAO CONSUTA SQL PARA EXCEL

MARCIOPEREIRA 16/12/2013 16:51:07
#432158
Pessoal Boa tarde!

Estou precisando criar uma aplicação WindowsForm no Visual Studio 2012 Express, para que seja executado uma consulta SQL e o resultado dela seja impressa numa planilha do Excel.

Exemplo: Terei um Botão imprimir que irá fazer o seguinte:
Select CdProduto, DsProduto, VlProduto, Qtde From Produto

Estes registros que irão retornar preciso enviá-los para o Excel.

1 Lâmpada 3,00 25,00
2 tomada 4,00 2,00

Desde Já Agradeço
PROFESSOR 29/12/2013 23:08:26
#432518
Bom, você pode fazer isso de várias formas, cada uma com vantagens e desvantagens.
- Usando o Office;
- Exportando como CSV, formato que o MS-Excel reconhece;
- Usando o Crystal Reports;
- Usando a ADO ActiveX, que eu usava com frequência até o final de 2004;
- Claro, usando bibliotecas de terceiros.

O mais rápido é exportar como CSV. Todos os demais fazem o mesmo, mas com o formato BIFF do Excel. Prefiro exportar para CSV pois é basicamente ler e escrever, portanto é fácil também e não requer componentes.

Explico como: Crie uma classe como, por exemplo esta:
Public Class Exportadores
Public Shared Sub Tb2CSV(ByVal tb As DataTable,
ByVal wt As IO.TextWriter,
Optional ByVal withHeaders As Boolean = True)
Try
If (withHeaders) Then
Dim headerValues As List(Of String) = New List(Of String)()
For Each column As DataColumn In tb.Columns
headerValues.Add(qv(column.ColumnName))
Next
End If
Dim items() As String = Nothing
For Each row As DataRow In tb.Rows
items = row.ItemArray.Select(Function(obj) qv(obj.ToString())).ToArray()
wt.WriteLine(String.Join([Ô],[Ô], items))
Next
wt.Flush()
Catch ex As Exception
End Try
End Sub
Private Shared Function qv(ByVal value As String) As String
Return String.Concat([Ô][Ô][Ô][Ô], value.Replace([Ô][Ô][Ô][Ô], [Ô][Ô][Ô][Ô][Ô][Ô]), [Ô][Ô][Ô][Ô])
End Function
End Class

Essa classe (Exportadores) é quem vai fazer o trabalho efetivo. Agora, nos trechos do seu código onde queira exportar a tabela, independente de qual seja ela, inclua as seguintes três linhas:

...
Using novoCSV As System.IO.StreamWriter = New System.IO.StreamWriter(String.Format([Ô]{0}\{1}.csv[Ô], pasta, arquivo)
Exportadores.Tb2CSV(minhaTabela, novoCSV)
End Using
...

E pronto. Exportado.

Claro, você pode implementar esse código para usar outros delimitadores / customizados, para que seja apresentado um quadro de diálogo, para mostrar barra de progresso, para abrir o arquivo com o Excel ao terminar de gravar, coisas do gênero, mas o [Ô]grosso[Ô] é isso.

Faça seu login para responder