Introdução
Aspose.Cells FOSS para C++ é uma biblioteca open-source para criar, carregar, editar e salvar pastas de trabalho Excel .xlsx a partir de código C++ nativo, sem exigir Microsoft Excel ou qualquer automação COM. Ela se integra a uma compilação baseada em CMake como uma biblioteca de código-fonte — não há dependência externa de tempo de execução para instalar ou vincular além da biblioteca padrão C++.
A biblioteca tem licença MIT e tem como alvo o C++17. Ela é compilada com add_subdirectory ou FetchContent a partir de um clone git, já que não é distribuída por um gerenciador de pacotes como vcpkg ou Conan. A interface API é organizada em torno de um Workbook que possui um WorksheetCollection, planilhas que expõem um objeto Cells para acesso a nível de célula, e uma fachada Style para fontes, preenchimentos e bordas. Se você desenvolve serviços de backend, geradores de relatórios ou pipelines de exportação de dados em C++ e precisa produzir ou ler arquivos .xlsx sem recorrer ao Excel, esta biblioteca fornece uma maneira nativa de fazer isso.
Aspose.Cells FOSS também está disponível para .NET, Go, Java, Python, Rust e TypeScript. A biblioteca C++ segue a mesma abordagem do resto da família: um API focado em XLSX baseado no que realmente é implementado, sob uma licença permissiva.
O que está incluído
Estrutura de Pasta de Trabalho e Planilha
Um Workbook começa com uma planilha. Planilhas adicionais são criadas com WorksheetCollection::Add, e planilhas existentes são acessadas por índice ou por nome através do indexador da coleção. Cada Worksheet expõe suas células por meio de GetCells().
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
using namespace Aspose::Cells_FOSS;
Workbook workbook;
workbook.GetWorksheets()[0].SetName("Data");
workbook.GetWorksheets().Add("Summary");
Worksheet& data = workbook.GetWorksheets()["Data"];
data.GetCells()["A1"].PutValue("Product");
data.GetCells()["B1"].PutValue("Price");
Valores de Células, Fórmulas e Formatos Numéricos
Cell::PutValue tem sobrecargas para strings, inteiros, doubles, booleans e outros tipos de valor, portanto não é necessária conversão manual de string. SetFormula aceita uma fórmula com ou sem um = inicial e a normaliza; GetType então relata um CellValueType de Formula. A formatação numérica é aplicada através de Style::SetNumberFormat e afeta apenas o texto exibido retornado por GetDisplayStringValue — o valor armazenado subjacente permanece inalterado.
auto& sheet = workbook.GetWorksheets()[0];
auto cell = sheet.GetCells()["B2"];
cell.PutValue(1234.567);
auto style = cell.GetStyle();
style.SetNumberFormat("#,##0.00");
cell.SetStyle(style);
sheet.GetCells()["B3"].SetFormula("B2*2");
// GetFormula() now returns "=B2*2"; GetType() reports CellValueType::Formula
std::cout << cell.GetDisplayStringValue() << std::endl; // "1,234.57"
Estilização com Fontes, Preenchimentos e Bordas
Cell::GetStyle() e SetStyle() leem e gravam um objeto Style que agrupa Font, Borders e configurações de preenchimento. Cores são construídas com Color::FromArgb, e padrões de preenchimento são definidos através de FillPattern.
Style headerStyle = sheet.GetCells()["A1"].GetStyle();
Font font;
font.SetBold(true);
font.SetColor(Color::FromArgb(255, 255, 255, 255));
headerStyle.SetFont(font);
headerStyle.SetPattern(FillPattern::Solid);
headerStyle.SetForegroundColor(Color::FromArgb(255, 34, 120, 212));
sheet.GetCells()["A1"].SetStyle(headerStyle);
Validação de Dados e Formatação Condicional
ValidationCollection::Add define o escopo de uma regra Validation para um CellArea; definir seu ValidationType como List com um valor Formula1 produz um menu suspenso dentro da célula. ConditionalFormattingCollection::Add cria um grupo de formatação que é escopado com AddArea e preenchido com AddCondition, que aceita um FormatConditionType, um OperatorType e uma ou duas fórmulas.
int validationIndex = sheet.GetValidations().Add(CellArea::CreateCellArea("B1", "B3"));
auto validation = sheet.GetValidations()[validationIndex];
validation.SetType(ValidationType::List);
validation.SetFormula1("\"Open,Closed\"");
validation.SetShowError(true);
int cfIndex = sheet.GetConditionalFormattings().Add();
auto formatting = sheet.GetConditionalFormattings()[cfIndex];
formatting.AddArea(CellArea::CreateCellArea("C1", "C3"));
int conditionIndex = formatting.AddCondition(
FormatConditionType::CellValue, OperatorType::Between, "1", "9");
auto condition = formatting[conditionIndex];
auto conditionStyle = condition.GetStyle();
conditionStyle.SetPattern(FillPattern::Solid);
conditionStyle.SetForegroundColor(Color::FromArgb(255, 255, 199, 206));
condition.SetStyle(conditionStyle);
Configuração de Página e Layout de Impressão
Worksheet::GetPageSetup() retorna um objeto PageSetup que controla o tamanho do papel, orientação, escala, área de impressão e linhas/colunas de título de impressão. Os valores são validados na atribuição — por exemplo, uma chamada SetScale fora do intervalo gera um CellsException.
auto& pageSetup = sheet.GetPageSetup();
pageSetup.SetOrientation(PageOrientationType::Landscape);
pageSetup.SetPaperSize(PaperSizeType::PaperA4);
pageSetup.SetFitToPagesWide(1);
pageSetup.SetFitToPagesTall(3);
pageSetup.SetPrintArea("$A$1:$D$20");
pageSetup.SetPrintTitleRows("$1:$2");
Início Rápido
Aspose.Cells FOSS para C++ não é distribuído via um gerenciador de pacotes — clone o repositório e adicione-o ao seu projeto CMake:
git clone https://github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Cpp.git
Adicione a biblioteca como um subdiretório do seu próprio CMakeLists.txt e vincule ao alvo aspose_cells_foss:
add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp/Aspose.Cells.Foss.Cpp)
target_link_libraries(MyApp PRIVATE aspose_cells_foss)
Então crie, estilize e salve uma planilha:
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/Cell.h"
#include "aspose/cells_foss/Style.h"
#include "aspose/cells_foss/Font.h"
#include "aspose/cells_foss/Color.h"
using namespace Aspose::Cells_FOSS;
int main() {
Workbook workbook;
Worksheet& sheet = workbook.GetWorksheets()[0];
sheet.SetName("Products");
sheet.GetCells()["A1"].PutValue("Product");
sheet.GetCells()["B1"].PutValue("Price");
sheet.GetCells()["A2"].PutValue("Apple");
sheet.GetCells()["B2"].PutValue(2.99);
sheet.GetCells()["A3"].PutValue("Orange");
sheet.GetCells()["B3"].PutValue(1.99);
sheet.GetCells()["B4"].SetFormula("SUM(B2:B3)");
Style header = sheet.GetCells()["A1"].GetStyle();
Font font;
font.SetBold(true);
header.SetFont(font);
sheet.GetCells()["A1"].SetStyle(header);
workbook.Save("products.xlsx");
return 0;
}
Formatos Compatíveis
| Formato | Extensão | Ler | Escrever |
|---|---|---|---|
| XLSX | .xlsx | ✓ | ✓ |
XLSX é o único formato que a versão atual lê e grava. Os construtores de arquivo e fluxo de Workbook carregam dados .xlsx, e Save os grava novamente; os enums LoadFormat e SaveFormat controlam a seleção explícita de formato nessas chamadas.
Código Aberto & Licenciamento
Aspose.Cells FOSS para C++ tem licença MIT. O código-fonte completo está disponível em GitHub, e a licença permite uso comercial, modificação e redistribuição.