30 de set. de 2009

Excel com C#

image

Bem, vou deixar registrada a dica aqui para quem precisar gerar planilhas do Excel em seus projetos:

Primeiro é necessário ter instalado o Excel na maquina ou servidor onde será instalada a aplicação. Isto é porque nós vamos acessá-lo para gerar as planilhas através da VSTO!

Com VSTO na máquina de desenvolvimento referêncie o Excel em sua Aplicação:

image

image

Com ele referênciado, defina se using:

using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;

Eu o apelidei de “Excel” para ficar mais legível o código, foi preciso referênciar o Reflection também.

Vamos dar um “Hello Life”, porque “Hello World” é muito clichê! Assim vamos explorar um código básico de criação de um arquivo Excel (.XLSX):

using System;
using System.Reflection;
using Excel = Microsoft.Office.Interop.Excel;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // -> Invoca a aplicação.
                Excel.Application excel = new Excel.Application();
                // -> Adiciona uma coleção de planilhas.
                Excel._Workbook wb = (Excel._Workbook)excel.Workbooks.Add(Missing.Value);
                // -> Pega a planilha ativa.
                Excel._Worksheet sheet = (Excel._Worksheet)wb.ActiveSheet;

                // -> Define um intervalo.
                //    Da célula A1 até a X1 (primeira linha)
                //    eu formatei a fonte para negrito.
                sheet.get_Range("A1", "X1").Font.Bold = true;
                // -> Escreve na Célula de linha e coluna igual a 1.
                sheet.Cells[1, 1] = "Hello Life";

                // -> escreve a tabuada do 8.
                for (int i = 1; i <= 10; i++)
                    sheet.Cells[i + 1, 1] = string.Format("= {0} * 8", i);

                // -> Define um nome para o arquivo do Excel.
                var nome = "D:\\Temp\\TesteExcel.xlsx";
                // -> Não Mostra alertas quando sobrescreve um arquivo já existente.
                excel.DisplayAlerts = false;
                // -> Torna o Excel Visível.
                excel.Visible = true;

                // -> Salva o arquivo.
                wb.SaveAs(
                    nome,
                    Excel.XlFileFormat.xlWorkbookDefault,
                    null,
                    null,
                    false,
                    false,
                    Excel.XlSaveAsAccessMode.xlShared,
                    false,
                    false,
                    null,
                    null,
                    null);

                // -> Fecha a planilha.
                wb.Close(null, null, null);
                // -> Fecha a coleção de Planilhas
                excel.Workbooks.Close();
                // -> Sai do Excel.
                excel.Quit();

                // -> Seta os componetes do Excel para nulo.
                //    pois são componentes COM.
                //    pode ser usado using também para descartá-los.
                sheet = null;
                wb = null;
                excel = null;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}

Após o teste:

image 

image

Fica registrado então este exemplo de criação, escrita, foórmula básica… e ainda conseguimos salvá-lo!

Espero que gostem e seja de ajuda :)

5 comentários:

John Henderson disse...

Olá spoky! :)
Estava procurando por uma solução de como criar planilhas excel sem ter o excel instalado no servidor(é uma app asp.net). Encontrei utilizando RESPONSE, porém consigo somente gerar uma planilha por arquivo. Gostaria de saber se você sabia algo sobre como criar N planilhas por arquivo.

Obg! :)

Zoio disse...

Exatamente o que eu precisava, Spoky! Valeu mesmo!

Sabrina disse...

Spoky!

Muito obrigada! Adorei esse exemplo, estava procurando algo assim!

Unknown disse...

Parabéns amigo pela iniciativa de ajudar a galera iniciante onde eu faço parte deste grupo, de como manipular planilhas do excel usando C#.

Uma sugestão:
Postar artigo sobre formatação de celulas, como contorno, fundo colorido etc.

Abraço.
Robson Martins

Anônimo disse...

Cara, muito obrigado. Há muito tempo que procurava como fazer e, sem muito sucesso ao tentar entender o suporte da msdn.Excelente exemplo, muito didático. Obrigado por compartilhar o conhecimento.