Apesar de ser bastante flexível e simples de usar, a biblioteca interop do Excel deixa bastante a desejar em termos de desempenho. É verdade que se tivessemos de fazer o trabalho à mão, levaria bastante mais tempo, mas quando se pode ganhar tempo, acho que tudo vale a pena experimentar.
Após várias pesquisas, encontrei uma possivel solução que resolve alguns destes problemas, é gratuita e chama-se “ClosedXML”.
Em termos de sintaxe, é bastante semelhante ao excel interop, em baixo mostro um exemplo de criação de um novo livro excel, adição de uma worksheet e de seguida gravo o livro:
//criação do novo livro var workbook = new XLWorkbook(); //Adicionar uma sheet ao mesmo var worksheet = workbook.Worksheets.Add("Lista de Endereços"); //Gravar o livro criado workbook.SaveAs(diretoria + "\\ListaEnderecos.xlsx");
Para abrir um livro já existente e escrever no mesmo:
//Abertura do ficheiro workbook = new XLWorkbook(diretoria + "\\ListaEnderecos.xlsx", XLEventTracking.Disabled); var sheet = workbook.Worksheet(1); //Escrita do Cabeçalho sheet.Cell(1, "A").Value = "Nº artigo"; sheet.Cell(1, "B").Value = "Designação"; sheet.Cell(1, "C").Value = "Quantidade"; sheet.Cell(1, "D").Value = "Preço s/ iva"; sheet.Cell(1, "E").Value = "iva"; //Definir cor de fundo das células sheet.Range("A1:E1").Style.Fill.BackgroundColor = XLColor.Yellow; //Gravar alterações workbook.Save();
E basta isto, para escrever e formatar algumas células no ClosedXML, aqui, uma das principais diferenças quando comparado ao Interop, é o facto de em vez de Cells para fazer referência à célula, usa-se apenas Cell e em vez [] usa-se (), destaca-se o facto de não ser necessário fechar a instância do Excel no fim da sua utilização, pois esta biblioteca escreve diretamente nos xml dos ficheiros, não sendo necessário ter a aplicação aberta para enviar comandos.
No entanto, destaca-se o facto de não suportar imagens (se tentar copiar uma folha completa, as imagens não irão passar para a nova), o facto de apenas suportar formatos de ficheiros baseados no padrão “Open XML” (.xlsx) bem como o facto de não suportar ficheiros com macros (.xlsm), apesar de existirem por aí alguns workarounds mas que ainda não experimentei.
Pode descarregar o ClosedXML gratuitamente em: https://closedxml.codeplex.com/