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”.

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/


0 comentários

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *