Giới thiệu

Quản lý bảng tính là phần của Aspose.Cells FOSS cho C++ mà hầu hết các chương trình tiếp cận đầu tiên: Workbook sở hữu tệp, các đối tượng Worksheet bên trong nó, và bộ sưu tập Cells chứa các giá trị, công thức và định dạng. Bài viết này đi sâu hơn phần giới thiệu chung — cách tạo và duyệt workbook và worksheet, cách đọc và ghi giá trị ô và công thức, cách Style, Font, Color và Borders kết hợp để định dạng đầu ra, và cách PageSetup, Hyperlink, DefinedName và Validation thêm cấu trúc quanh lưới ô thô.

Mọi lớp được đề cập ở đây đều là một phần của API C++ gốc được khai báo trong các header aspose/cells_foss/. Không có tương tác COM và không phụ thuộc vào việc cài đặt Microsoft Excel — thư viện đọc và ghi định dạng gói .xlsx trực tiếp, đây cũng là lý do phiên bản hiện tại chỉ hỗ trợ .xlsx, cả ở phía tải và lưu.

Các ví dụ dưới đây xây dựng dựa trên nhau: một workbook được tạo, các worksheet và ô được điền dữ liệu, kiểu dáng được áp dụng, và tệp được lưu và tải lại để xác nhận quá trình vòng tròn. Tất cả mã đều được lấy cảm hứng từ các bộ kiểm tra tương thích, golden và unit test của thư viện, vì vậy chúng phản ánh các thao tác được thực hiện trên đầu ra .xlsx thực tế.


Các tính năng chính

Quản lý Workbook và Worksheet

Một Workbook bắt đầu với một worksheet trong WorksheetCollection của nó. Các worksheet được thêm bằng Add(), được tra cứu theo chỉ mục hoặc theo tên, và được đổi tên bằng SetName(). WorksheetCollection cũng theo dõi sheet nào đang hoạt động:

#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"

using namespace Aspose::Cells_FOSS;

Workbook workbook;
Worksheet& sheet = workbook.GetWorksheets()[0];
sheet.SetName("Data");

int summaryIndex = workbook.GetWorksheets().Add("Summary");
workbook.GetWorksheets().SetActiveSheetIndex(0);

int sheetCount = workbook.GetWorksheets().GetCount(); // 2

Việc lưu và tải lại đều thông qua cùng một kiểu Workbook. Workbook::Save() chấp nhận một đường dẫn tệp, và một Workbook có thể được tạo trực tiếp từ một đường dẫn hoặc từ bộ đệm byte trong bộ nhớ, cho phép truyền qua lại các giá trị ô và công thức:

workbook.Save("report.xlsx");

Workbook loaded("report.xlsx");
Worksheet& reloadedSheet = loaded.GetWorksheets()["Data"];

Giá trị ô và Công thức

Cells, được truy cập thông qua Worksheet::GetCells(), đánh chỉ mục các ô bằng tham chiếu kiểu A1. Cell::PutValue() chấp nhận chuỗi, số nguyên, số thực (double), và boolean, SetFormula() lưu trữ một chuỗi công thức Excel, và GetValue() trả về một CellValue với các bộ truy cập kiểu (AsString(), AsInteger(), AsDouble(), AsBool(), AsDateTime()):

Cells& cells = sheet.GetCells();
cells["A1"].PutValue("Category");
cells["B1"].PutValue("Amount");
cells["A2"].PutValue("Travel");
cells["B2"].PutValue(482.50);
cells["A3"].PutValue("Supplies");
cells["B3"].PutValue(129.99);
cells["B4"].SetFormula("=SUM(B2:B3)");

CellValue amount = cells["B2"].GetValue();
if (amount.IsDouble()) {
    double value = amount.AsDouble();
}

std::string formula = cells["B4"].GetFormula();

Cell::GetType() báo cáo CellValueType đã lưu (Blank, String, Number, Boolean, DateTime, hoặc Formula), và GetDisplayStringValue() trả về giá trị được định dạng như cách nó sẽ hiển thị trong Excel, tôn trọng bất kỳ định dạng số nào được áp dụng qua Style.

Định dạng với Style, Font, Color và Borders

Cell::GetStyle() trả về một đối tượng Style có thể được chỉnh sửa và áp dụng lại với SetStyle(). Style cung cấp một Font, một bộ Borders, mẫu tô và màu, căn chỉnh, và định dạng số:

#include "aspose/cells_foss/Style.h"
#include "aspose/cells_foss/Color.h"

Cell headerCell = sheet.GetCells()["A1"];
Style style = headerCell.GetStyle();

Font font = style.GetFont();
font.SetBold(true);
font.SetColor(Color::FromArgb(255, 255, 255, 255));
style.SetFont(font);

style.SetPattern(FillPattern::Solid);
style.SetForegroundColor(Color::FromArgb(255, 34, 120, 212));
style.SetHorizontalAlignment(HorizontalAlignmentType::Center);

Borders borders = style.GetBorders();
Border bottomBorder = borders.GetBottom();
bottomBorder.SetLineStyle(BorderStyleType::Thin);
borders.SetBottom(bottomBorder);
style.SetBorders(borders);

style.SetNumberFormat("#,##0.00");
headerCell.SetStyle(style);

Style là một kiểu giá trị: đọc lại nó bằng GetStyle() phản ánh bất kỳ giá trị nào cuối cùng được đặt bằng SetStyle(), điều này giúp việc xây dựng một style và áp dụng nó trên toàn bộ hàng tiêu đề hoặc một phạm vi các ô dữ liệu trở nên đơn giản.

Cài đặt Trang và Cấu hình In

Worksheet::GetPageSetup() trả về một đối tượng PageSetup bao gồm kích thước giấy, hướng, lề, tỉ lệ, tiêu đề in và ngắt trang:

#include "aspose/cells_foss/PageSetup.h"

PageSetup& pageSetup = sheet.GetPageSetup();
pageSetup.SetOrientation(PageOrientationType::Landscape);
pageSetup.SetPaperSize(PaperSizeType::PaperA4);
pageSetup.SetFitToPagesWide(1);
pageSetup.SetFitToPagesTall(0);
pageSetup.SetPrintArea("$A$1:$D$20");
pageSetup.SetPrintTitleRows("$1:$1");
pageSetup.SetLeftMargin(0.5);
pageSetup.SetCenterFooter("Page &P of &N");
pageSetup.AddHorizontalPageBreak(20);

Lề có sẵn ở cả đơn vị thô (GetLeftMargin()) và inch (GetLeftMarginInch()), và GetHorizontalPageBreaks() / GetVerticalPageBreaks() trả về các vị trí ngắt trang hiện đang được đặt trên trang tính.

Liên kết siêu văn bản, Tên đã định nghĩa và Xác thực dữ liệu

Worksheet::GetHyperlinks() trả về một HyperlinkCollection. Add() nhận một ô hoặc phạm vi mục tiêu cùng với một địa chỉ và trả về chỉ mục của liên kết siêu văn bản mới, được dùng để lấy đối tượng Hyperlink để thực hiện các thay đổi tiếp theo:

#include "aspose/cells_foss/Hyperlink.h"

sheet.GetCells()["A1"].PutValue("Documentation");
int linkIndex = sheet.GetHyperlinks().Add("A1", 1, 1, "https://example.com/docs");
Hyperlink link = sheet.GetHyperlinks()[linkIndex];
link.SetTextToDisplay("Documentation");
link.SetScreenTip("Open the docs site");

Workbook::GetDefinedNames() quản lý các phạm vi có tên theo cùng cách — Add() trả về một chỉ mục vào DefinedNameCollection:

#include "aspose/cells_foss/DefinedName.h"

int nameIndex = workbook.GetDefinedNames().Add("Total", "=Data!$B$2:$B$3");
DefinedName total = workbook.GetDefinedNames()[nameIndex];
total.SetComment("Sum of tracked expenses");

Worksheet::GetValidations() tuân theo cùng mẫu thu thập cho các quy tắc xác thực dữ liệu, được giới hạn trong một CellArea:

#include "aspose/cells_foss/Validation.h"
#include "aspose/cells_foss/CellArea.h"

int ruleIndex = sheet.GetValidations().Add(CellArea::CreateCellArea("B2", "B3"));
Validation amountRule = sheet.GetValidations()[ruleIndex];
amountRule.SetType(ValidationType::Decimal);
amountRule.SetOperator(OperatorType::GreaterThan);
amountRule.SetFormula1("0");
amountRule.SetErrorTitle("Invalid Amount");
amountRule.SetErrorMessage("Enter a positive number");

Thuộc tính tài liệu và cài đặt sổ làm việc

Workbook::GetDocumentProperties() hiển thị các trường siêu dữ liệu OOXML cốt lõi và mở rộng (tiêu đề, tác giả, công ty, quản lý và các tương tự), và Workbook::GetSettings() kiểm soát hành vi ở mức sổ làm việc như hệ thống ngày:

#include "aspose/cells_foss/DocumentProperties.h"

workbook.GetDocumentProperties().SetCompany("Example Corp");
workbook.GetDocumentProperties().SetManager("Finance Team");

workbook.GetSettings().SetDate1904(false);

Các giá trị này được lưu và tải lại một cách tuần hoàn giống như nội dung ô, điều này hữu ích cho các báo cáo cần siêu dữ liệu nhất quán giữa các tệp được tạo.


Bắt đầu nhanh

Aspose.Cells FOSS cho C++ được xây dựng từ mã nguồn bằng CMake. Sao chép kho và hoặc thêm nó như một thư mục con hoặc kéo nó vào bằng FetchContent:

git clone https://github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Cpp.git
cmake_minimum_required(VERSION 3.15)
project(MyProject CXX)
set(CMAKE_CXX_STANDARD 17)

add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)

add_executable(MyApp main.cpp)
target_link_libraries(MyApp PRIVATE Aspose.Cells.Foss.Cpp)

Một ví dụ quản lý bảng tính tối thiểu — tạo, định dạng, lưu và tải lại:

#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/Cell.h"

using namespace Aspose::Cells_FOSS;

int main() {
    Workbook workbook;
    Worksheet& sheet = workbook.GetWorksheets()[0];
    sheet.SetName("Expenses");

    Cells& cells = sheet.GetCells();
    cells["A1"].PutValue("Category");
    cells["B1"].PutValue("Amount");
    cells["A2"].PutValue("Travel");
    cells["B2"].PutValue(482.50);
    cells["A3"].PutValue("Supplies");
    cells["B3"].PutValue(129.99);
    cells["B4"].SetFormula("=SUM(B2:B3)");

    workbook.Save("expenses.xlsx");

    Workbook loaded("expenses.xlsx");
    Cells& loadedCells = loaded.GetWorksheets()["Expenses"].GetCells();
    double total = loadedCells["B4"].GetValue().AsDouble();

    return 0;
}

Định dạng được hỗ trợ

Định dạngPhần mở rộngĐọcGhi
Xlsx.xlsx✓✓

LoadFormat và SaveFormat đều cung cấp một giá trị Xlsx duy nhất trong phiên bản này; các hàm khởi tạo Workbook(path) và Workbook(bytes) tải đầu vào .xlsx, và Workbook::Save() ghi đầu ra .xlsx vào đường dẫn, luồng, hoặc bộ đệm trong bộ nhớ.


Mã nguồn mở & Giấy phép

Aspose.Cells FOSS cho C++ được phát hành dưới giấy phép MIT. Mã nguồn có sẵn trên GitHub, và thư viện có thể được sử dụng, chỉnh sửa và phân phối lại trong các dự án thương mại và mã nguồn mở mà không có phí chạy thời gian.


Bắt đầu

Tài nguyên liên quan