บทนำ
การจัดการสเปรดชีตเป็นส่วนของ Aspose.Cells FOSS สำหรับ C++ ที่โปรแกรมส่วนใหญ่จะสัมผัสเป็นอันดับแรก: Workbook ที่เป็นเจ้าของไฟล์, วัตถุ Worksheet ภายในไฟล์, และคอลเลกชัน Cells ที่เก็บค่า, สูตร, และการจัดรูปแบบ. โพสต์นี้จะเจาะลึกส่วนนี้มากกว่าการแนะนำทั่วไป — วิธีการสร้างและนำทางเวิร์กบุ๊กและเวิร์กชีต, วิธีการอ่านและเขียนค่าของเซลและสูตร, วิธีที่ Style, Font, Color, และ Borders ทำงานร่วมกันเพื่อจัดรูปแบบผลลัพธ์, และวิธีที่ PageSetup, Hyperlink, DefinedName, และ Validation เพิ่มโครงสร้างรอบกริดของเซลล์ดิบ.
ทุกคลาสที่กล่าวถึงที่นี่เป็นส่วนหนึ่งของ API ของ C++ ดั้งเดิมที่ประกาศในหัวข้อไฟล์ aspose/cells_foss/. ไม่มีการทำงานร่วมกับ COM และไม่มีการพึ่งพา Microsoft Excel ที่ติดตั้งอยู่ — ไลบรารีนี้อ่านและเขียนรูปแบบแพ็คเกจ .xlsx โดยตรง, ซึ่งเป็นเหตุผลที่เวอร์ชันปัจจุบันรองรับเฉพาะ .xlsx เท่านั้น, ทั้งในด้านการโหลดและการบันทึก.
ตัวอย่างด้านล่างจะต่อเนื่องกัน: สร้างเวิร์กบุ๊ก, เติมข้อมูลในเวิร์กชีตและเซลล์, ใช้การจัดรูปแบบ, แล้วบันทึกไฟล์และโหลดใหม่เพื่อยืนยันการทำงานครบวงจร. โค้ดทั้งหมดได้ดัดแปลงมาจากชุดทดสอบความเข้ากันได้, ชุดทดสอบทอง, และชุดทดสอบหน่วยของไลบรารีเอง, ดังนั้นจึงสะท้อนการดำเนินการที่ถูกทดสอบกับผลลัพธ์ .xlsx จริง.
คุณลักษณะสำคัญ
การจัดการเวิร์กบุ๊กและเวิร์กชีต
Workbook เริ่มต้นด้วยเวิร์กชีตหนึ่งชีตใน WorksheetCollection ของมัน. เพิ่มเวิร์กชีตด้วย Add(), ค้นหาโดยดัชนีหรือชื่อ, และเปลี่ยนชื่อด้วย SetName(). WorksheetCollection ยังติดตามว่าแผ่นใดเป็นแผ่นที่ใช้งานอยู่:
#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
การบันทึกและโหลดใหม่ใช้ประเภท Workbook เดียวกัน Workbook::Save() รับเส้นทางไฟล์ และ Workbook สามารถสร้างโดยตรงจากเส้นทางหรือจากบัฟเฟอร์ไบต์ในหน่วยความจำ ซึ่งทำให้ค่าของเซลล์และสูตรถูกส่งกลับไปมาได้:
workbook.Save("report.xlsx");
Workbook loaded("report.xlsx");
Worksheet& reloadedSheet = loaded.GetWorksheets()["Data"];
ค่าของเซลล์และสูตร
Cells ที่เข้าถึงผ่าน Worksheet::GetCells() จัดทำดัชนีเซลล์โดยอ้างอิงแบบ A1. Cell::PutValue() รับสตริง, จำนวนเต็ม, ดับเบิลและบูลีน, SetFormula() เก็บสตริงสูตรของ Excel, และ GetValue() คืนค่า CellValue พร้อมตัวเข้าถึงแบบมีชนิด (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() รายงาน CellValueType ที่เก็บไว้ (Blank, String, Number, Boolean, DateTime, หรือ Formula) และ GetDisplayStringValue() คืนค่าที่จัดรูปแบบตามที่จะแสดงใน Excel โดยเคารพรูปแบบตัวเลขใด ๆ ที่ถูกกำหนดผ่าน Style.
การจัดรูปแบบด้วย Style, Font, Color, และ Borders
Cell::GetStyle() คืนอ็อบเจ็กต์ Style ที่สามารถแก้ไขและนำกลับไปใช้ใหม่ด้วย SetStyle(). Style เปิดเผย Font, ชุด Borders, รูปแบบการเติมและสี, การจัดแนว, และรูปแบบตัวเลข:
#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 เป็นประเภทค่า: การอ่านกลับด้วย GetStyle() จะสะท้อนสิ่งที่ตั้งครั้งสุดท้ายด้วย SetStyle(), ซึ่งทำให้สร้างสไตล์เดียวและนำไปใช้ทั่วแถวหัวตารางหรือช่วงของเซลล์ข้อมูลได้อย่างง่ายดาย.
การตั้งค่าหน้าและการกำหนดค่าการพิมพ์
Worksheet::GetPageSetup() คืนค่าอ็อบเจ็กต์ PageSetup ที่ครอบคลุมขนาดกระดาษ, การวางแนว, ระยะขอบ, การปรับสเกล, ชื่อเรื่องสำหรับการพิมพ์, และการแบ่งหน้า:
#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);
ระยะขอบสามารถกำหนดได้ทั้งหน่วยดิบ (GetLeftMargin()) และนิ้ว (GetLeftMarginInch()) และ GetHorizontalPageBreaks() / GetVerticalPageBreaks() จะคืนค่าตำแหน่งการแบ่งหน้าที่ตั้งอยู่ในแผ่นงานในขณะนี้.
ไฮเปอร์ลิงก์, ชื่อที่กำหนด, และการตรวจสอบความถูกต้องของข้อมูล
Worksheet::GetHyperlinks() คืนค่า HyperlinkCollection. Add() รับเซลล์หรือช่วงเป้าหมายพร้อมที่อยู่และคืนค่าดัชนีของไฮเปอร์ลิงก์ใหม่ ซึ่งใช้เพื่อดึงอ็อบเจ็กต์ Hyperlink เพื่อทำการเปลี่ยนแปลงต่อไป:
#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() จัดการช่วงที่ตั้งชื่อด้วยวิธีเดียวกัน — Add() คืนค่าดัชนีไปยัง 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() ปฏิบัติตามรูปแบบการเก็บรวบรวมเดียวกันสำหรับกฎการตรวจสอบความถูกต้องของข้อมูล ซึ่งจำกัดอยู่ใน 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");
คุณสมบัติของเอกสารและการตั้งค่าเวิร์กบุ๊ก
Workbook::GetDocumentProperties() เปิดเผยฟิลด์เมตาดาต้า OOXML แกนและขยาย (ชื่อเรื่อง, ผู้เขียน, บริษัท, ผู้จัดการ, และอื่น ๆ ที่คล้ายกัน) และ Workbook::GetSettings() ควบคุมพฤติกรรมระดับเวิร์กบุ๊กเช่นระบบวันที่:
#include "aspose/cells_foss/DocumentProperties.h"
workbook.GetDocumentProperties().SetCompany("Example Corp");
workbook.GetDocumentProperties().SetManager("Finance Team");
workbook.GetSettings().SetDate1904(false);
ค่าต่างๆ เหล่านี้ทำการบันทึกและโหลดใหม่ได้ครบวงจรเช่นเดียวกับเนื้อหาเซลล์ ซึ่งเป็นประโยชน์สำหรับรายงานที่ต้องการเมตาดาต้าที่สม่ำเสมอระหว่างไฟล์ที่สร้างขึ้น.
เริ่มต้นอย่างรวดเร็ว
Aspose.Cells FOSS สำหรับ C++ สร้างจากซอร์สด้วย CMake. โคลนรีโพซิทอรีและเพิ่มเป็นซับไดเรกทอรีหรือดึงเข้ามาด้วย 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)
ตัวอย่างการจัดการสเปรดชีตแบบมินิมัล — สร้าง, กำหนดรูปแบบ, บันทึก, และโหลดใหม่:
#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;
}
รูปแบบที่รองรับ
| รูปแบบ | ส่วนขยาย | อ่าน | เขียน |
|---|---|---|---|
| Xlsx | .xlsx | ✓ | ✓ |
LoadFormat และ SaveFormat ทั้งสองเปิดเผยค่า Xlsx เพียงค่าเดียวในเวอร์ชันนี้; ตัวสร้าง Workbook(path) และ Workbook(bytes) โหลดอินพุต .xlsx, และ Workbook::Save() เขียนเอาต์พุต .xlsx ไปยังพาธ, สตรีม, หรือบัฟเฟอร์ในหน่วยความจำ.
โอเพนซอร์ส & ลิขสิทธิ์
Aspose.Cells FOSS สำหรับ C++ ได้รับการเผยแพร่ภายใต้สัญญาอนุญาต MIT. โค้ดต้นฉบับพร้อมให้ดาวน์โหลดบน GitHub, และไลบรารีสามารถใช้, แก้ไข, และกระจายต่อในโครงการเชิงพาณิชย์และโอเพนซอร์สได้โดยไม่มีค่าธรรมเนียมการรันไทม์.