Trabalhando com Excel em C++: visão geral das bibliotecas e exemplos práticos
Ao desenvolver aplicações em C++, frequentemente surge a necessidade de interagir com arquivos do Microsoft Excel (formatos .xls e .xlsx). Isso pode incluir exportação de relatórios, importação de dados, automação de planilhas ou análise de grandes volumes de informações. Diferente de linguagens com bibliotecas padrão robustas (Python, C#), o C++ não possui ferramentas nativas para trabalhar com Excel, mas existem várias bibliotecas de terceiros poderosas que resolvem esse problema. Neste artigo, abordaremos três soluções populares: xlnt, libxl e OpenXLSX, além de fornecer exemplos de código para cada uma delas.
1. Biblioteca xlnt (gratuita, código aberto)
xlnt é uma biblioteca C++ moderna para ler, escrever e modificar arquivos no formato .xlsx. Ela não depende de objetos COM ou do Excel instalado, tornando-a ideal para projetos multiplataforma (Windows, Linux, macOS). A biblioteca utiliza o padrão C++14/17 e é ativamente mantida pela comunidade.
Principais recursos:
- Leitura e escrita de células, linhas e colunas.
- Suporte a estilos (fontes, cores, bordas, alinhamento).
- Trabalho com fórmulas, intervalos e células mescladas.
- Gerenciamento de várias planilhas.
- Trabalho com imagens e gráficos (limitado).
Instalação (via vcpkg ou compilação a partir do código-fonte):
vcpkg install xlntExemplo: criando um arquivo XLSX simples
#include <xlnt/xlnt.hpp>
int main() { xlnt::workbook wb; xlnt::worksheet ws = wb.active_sheet(); ws.title("Relatório");
// Escrevendo dados ws.cell("A1").value("Nome"); ws.cell("B1").value("Quantidade"); ws.cell("C1").value("Preço");
ws.cell("A2").value("Produto 1"); ws.cell("B2").value(10); ws.cell("C2").value(250.5);
// Estilo para cabeçalhos xlnt::header_footer hf; xlnt::font bold_font(true); ws.cell("A1").font(bold_font);
wb.save("exemplo.xlsx"); return 0;}Exemplo: lendo dados de um arquivo existente
#include <xlnt/xlnt.hpp>#include <iostream>
int main() { xlnt::workbook wb; wb.load("exemplo.xlsx"); xlnt::worksheet ws = wb.active_sheet();
for (auto row : ws.rows(false)) { for (auto cell : row) { std::cout << cell.to_string() << "\\t"; } std::cout << std::endl; } return 0;}2. Biblioteca libxl (comercial, possui versão gratuita)
libxl é uma biblioteca rápida e leve para trabalhar com .xls e .xlsx. Ela suporta tanto o formato binário antigo do Excel 97-2003 quanto o moderno OOXML. A biblioteca é distribuída sob licença comercial, mas para uso não comercial está disponível uma versão gratuita com limitação (marca d'água na planilha).
Principais recursos:
- Suporte a ambos os formatos: XLS e XLSX.
- Formatação de células: fontes, cores, bordas, preenchimento.
- Trabalho com fórmulas, células mescladas e autofiltros.
- Gerenciamento de planilhas e gráficos (limitado).
- Alta performance ao trabalhar com arquivos grandes.
Instalação: Baixe o SDK do site oficial (libxl.com) e adicione os arquivos de cabeçalho e a biblioteca ao seu projeto.
Exemplo: escrevendo dados em XLSX
#include "libxl.h"
int main() { libxl::Book* book = xlCreateXMLBook(); // ou xlCreateBook() para XLS if (book) { libxl::Sheet* sheet = book->addSheet("Planilha1"); if (sheet) { sheet Também na biblioteca
Validação de dados em JavaScript (Node.js): Joi, Yup, Zod
Doctrine ORM para PHP: guia completo com exemplos
Trabalho com S3 e armazenamentos em nuvem em Java: AWS SDK e MinIO
Processamento de Markdown em Node.js: bibliotecas marked, showdown e remarkable
Quartz Scheduler para Java: guia completo com exemplos práticos