fevereiro 2012
D S T Q Q S S
« dez    
 1234
567891011
12131415161718
19202122232425
26272829  

Relatórios no Excel com C# e Interop

A automatização de processos manuais por sistemas de informação geram grandes quantidades de dados, que são analisados mais facilmente através de gráficos. Um dos grandes poderes do Excel é a facilidade de tratar os dados de forma gráfica. Aqui vou demonstrar uma das formas de utilizar este recurso.

O relatório de saída precisa ser bem organizado, oferecer uma boa visualização e direcionar para as informações mais críticas da análise. Isso nem sempre é simples de obter com as ferramentas de geração de relatórios existentes no mercado, como o Reportviewer, iReport, Crystal Reports, etc. Dou preferência ao Excel pela facilidade de integração e personalização da estrutura desejada da visão final.

Abaixo está um exemplo de relatórios com gráfico que vou criar: (1)

Observação Importante As cores, fontes e imagens não serão alteradas neste exemplo, vou mostrar apenas como inserir os dados para atualizar os gráficos.

(1) Estamos levando em consideração que o gráfico não estará conectado a nenhuma base de dados, pois pode ser enviado por e-mail ou visualizado fora da rede onde foi criado.

Os gráficos estão vinculados aos dados conforme a imagem, e é somente esta planilha que será modificada.

1 – Definir as áreas de atualização da planilha

Para facilitar a atualização dos dados vamos nomear os intervalos que serão utilizados no Excel.
Células D4:E15 nomear como ‘faturamento_clientes
Células H3:H4 nomear como ‘nivel_satisfacao
Células D19:H30 nomear como ‘tempo_medio_solucao

2 – Criar as referências do Visual Studio para usar o Interop

A utilização do Excel no Visual Studio depende de três DLLs: Microsoft.Office.Interop.Excel.dll, OFFICE.DLL e Microsoft.Vbe.Interop.dll.

Para criar as referências acesse o menu ‘Project\Add Reference…’. Na aba ‘COM’ selecione ‘Microsoft Excel 14.0 Object Library’ (neste caso o Excel instalado é da versão 2010 do Microsoft Office).

As três DLLs serão referenciadas automaticamente, mas caso você precise rodar o projeto em um computador que não possua a sua versão do Microsoft Office você deve copiá-las para a pasta de destino do seu projeto.

Com as referências criadas é possível iniciar o procedimento que fará a inclusão dos dados na pasta do Excel.

3 – Criar o procedimento para incluir os dados na planilha

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public void preencheDadosExcel()
        {
            //Objeto do Excel
            Application xls;
 
            //Gerencia a pasta de trabalho criada
            Workbook wbk;
 
            //Controla o intervalo de células
            Range rng;
 
            //Armazena o caminho da planilha com os modelos do gráfico
            string caminhoPlanilhaPadrao = @"C:\Modelo Relatorio Site.xlsx";
 
            xls = new Application(); //cria uma nova instância do Excel
 
            xls.Visible = true;//torna visível o Excel
 
            wbk = xls.Workbooks.Add(caminhoPlanilhaPadrao); //associa a variável wbk à pasta de trabalho aberta
 
            Name nom; //armazena as informações do intervalo nomeado
            object[,] dadosIntervalo; //armazena os dados que serão preenchidos no intervalo
 
            #region Este procedimento deve ser repetido quantas vezes forem os intervalos a serem preenchidos
            //Início
 
            nom = wbk.Names.Item("faturamento_clientes"); //associa um valor à variável nom
 
            dadosIntervalo = new object[12, 2];//associa um valor à variável dadosIntervalo
            //Esta associação deve ser feita a partir da leitura de um banco de dados, mas a estrutura
            //final deve ser uma matriz de 12 linhas por 2 colunas
 
            //Como exemplo estou associando alguns dados à matriz
            dadosIntervalo = new object[12, 2] { 
                { 1, 500 }, 
                { 2, 750 },
                { 3, 1500 }, 
                { 4, 2100 },
                { 5, 2500 }, 
                { 6, 3200 },
                { 7, 3500 }, 
                { 8, 4100 },
                { 9, 4200 }, 
                { 10, 5500 },
                { 11, 5900 }, 
                { 12, 6900 } 
                };
 
            rng = nom.RefersToRange; //associa à range o intervalo nomeado
            rng.Value2 = dadosIntervalo; //define o valor das células como o conteúdo da matriz
            //Fim
            #endregion
        }

Neste exemplo os dados foram utilizados para alimentar os gráficos, mas poderiam ser utilizados para criar uma tabela ou outra estrutura que consuma dados no Excel.

Marcus Loyola
Bacharel em Sistemas de Informação
www.mloyola.com.br

2 comentários Relatórios no Excel com C# e Interop

  • Olá Marcus Loyola.

    Estou precisando de umas dicas.

    Estou com uma aplicação em C#.
    Tenho valores em DataGridViews e Arrays Multidimensionais.
    A aplicação gera gráficos a partir dos DataGridViews e dos Arrays.

    Quero criar um botão que ao ser clicado:

    Abra o excel; copia os dados dos DataGridViews e Arrays e gera os gráficos, e fique aberto para o usuário navegar pela planilha.

    Abraços,
    silvio pontes

Deixe um comentário