Bảng tổng hợp sắp xếp lại dữ liệu để thể hiện nó theo cách có ý nghĩa. Chúng cung cấp các tùy chọn sắp xếp khác nhau và cung cấp tổng, trung bình hoặc các số liệu thống kê khác bằng cách nhóm dữ liệu lại với nhau. Nó là một công cụ cần thiết để phân tích dữ liệu và là một phần cơ bản của MS Excel. Bạn có thể thấy mình trong các tình huống mà bạn cần tạo và thao tác bảng tổng hợp theo lập trình. Để đạt được mục tiêu đó, bài viết này sẽ hướng dẫn bạn cách làm việc với bảng tổng hợp trong tệp Excel bằng C ++.

API C ++ để làm việc với bảng tổng hợp trong tệp Excel

Aspose.Cells for C ++ là một thư viện C ++ gốc cho phép bạn tạo, đọc và cập nhật các tệp Excel mà không yêu cầu cài đặt Microsoft Excel. API cũng hỗ trợ làm việc với bảng tổng hợp trong tệp Excel. Bạn có thể cài đặt API thông qua NuGet hoặc tải xuống trực tiếp từ phần Tải xuống.

PM> Install-Package Aspose.Cells.Cpp

Tạo bảng tổng hợp trong tệp Excel bằng C ++

Trong ví dụ sau, chúng tôi sẽ tạo một tệp Excel mới, chèn dữ liệu mẫu vào đó và tạo bảng tổng hợp. Tệp được tạo trong ví dụ này sẽ được sử dụng làm tệp nguồn cho các ví dụ khác. Sau đây là các bước để tạo bảng tổng hợp trong tệp Excel.

Mã mẫu sau đây cho thấy cách tạo bảng tổng hợp trong tệp Excel bằng C ++.

// Đường dẫn thư mục nguồn.
StringPtr srcDir = new String("SourceDirectory\\");

// Đường dẫn thư mục đầu ra.
StringPtr outDir = new String("OutputDirectory\\");

// Tạo một phiên bản của lớp IWorkbook
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Truy cập trang tính đầu tiên
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Thêm dữ liệu nguồn cho bảng tổng hợp
intrusive_ptr<String> str = new String("Fruit");
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue(str);
str = new String("Quantity");
worksheet->GetICells()->GetObjectByIndex(new String("B1"))->PutValue(str);
str = new String("Price");
worksheet->GetICells()->GetObjectByIndex(new String("C1"))->PutValue(str);
str = new String("Apple");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);
str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(str);
str = new String("Mango");
worksheet->GetICells()->GetObjectByIndex(new String("A4"))->PutValue(str);
worksheet->GetICells()->GetObjectByIndex(new String("B2"))->PutValue(3);
worksheet->GetICells()->GetObjectByIndex(new String("B3"))->PutValue(4);
worksheet->GetICells()->GetObjectByIndex(new String("B4"))->PutValue(4);
worksheet->GetICells()->GetObjectByIndex(new String("C2"))->PutValue(2);
worksheet->GetICells()->GetObjectByIndex(new String("C3"))->PutValue(1);
worksheet->GetICells()->GetObjectByIndex(new String("C4"))->PutValue(4);

// Thêm bảng tổng hợp
int idx = worksheet->GetIPivotTables()->Add(new String("A1:C4"), new String("E5"), new String("MyPivotTable"));

// Truy cập bảng tổng hợp đã tạo
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(idx);

// Thao tác trên bảng tổng hợp các hàng, cột và trường dữ liệu
pivotTable->AddFieldToArea(PivotFieldType_Row, pivotTable->GetIBaseFields()->GetObjectByIndex(0));
pivotTable->AddFieldToArea(PivotFieldType_Data, pivotTable->GetIBaseFields()->GetObjectByIndex(1));
pivotTable->AddFieldToArea(PivotFieldType_Data, pivotTable->GetIBaseFields()->GetObjectByIndex(2));
pivotTable->AddFieldToArea(PivotFieldType_Column, pivotTable->GetIDataField());

// Đặt kiểu bảng tổng hợp
pivotTable->SetPivotTableStyleType(PivotTableStyleType_PivotTableStyleMedium9);

// Lưu tệp excel đầu ra
workbook->Save(outDir->StringAppend(new String("outputCreatePivotTable.xlsx")));
Hình ảnh của Bảng tổng hợp được tạo bởi mã mẫu

Hình ảnh của Bảng tổng hợp được tạo bởi mã mẫu

Sắp xếp Pivot Table trong Tệp Excel bằng C ++

Trong ví dụ sau, chúng tôi sẽ sắp xếp cột đầu tiên của bảng tổng hợp theo thứ tự giảm dần. Sau đây là các bước để sắp xếp dữ liệu trong bảng tổng hợp.

Mã mẫu sau đây trình bày cách sắp xếp bảng tổng hợp trong tệp Excel bằng C ++.

// Đường dẫn thư mục nguồn.
StringPtr srcDir = new String("SourceDirectory\\");

// Đường dẫn thư mục đầu ra.
StringPtr outDir = new String("OutputDirectory\\");

// Đường dẫn của tệp excel đầu vào
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Đường dẫn của tệp excel đầu ra
StringPtr outputSortedPivotTable = outDir->StringAppend(new String("outputSortedPivotTable.xlsx"));

// Tải tệp excel mẫu
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Truy cập trang tính đầu tiên
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Truy cập bảng tổng hợp
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Đặt sắp xếp bảng tổng hợp
pivotTable->AddFieldToArea(PivotFieldType_Row, 0);
intrusive_ptr<IPivotField> pivotField = pivotTable->GetIRowFields()->GetObjectByIndex(0);
pivotField->SetAutoSort(true);
pivotField->SetAscendSort(false);

// Làm mới và tính toán dữ liệu trong bảng tổng hợp.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Lưu tệp excel đầu ra
workbook->Save(outputSortedPivotTable);
Hình ảnh của Bảng tổng hợp được sắp xếp được tạo bởi mã mẫu

Hình ảnh của Bảng tổng hợp được sắp xếp được tạo bởi mã mẫu

Ẩn hàng trong bảng tổng hợp bằng C ++

Với API Aspose.Cells cho C ++, bạn cũng có thể ẩn các hàng trong bảng tổng hợp. Trong ví dụ sau, chúng tôi sẽ ẩn hàng có nhãn hàng “Orange”. Sau đây là các bước để ẩn hàng trong bảng tổng hợp.

Mã mẫu sau đây cho thấy cách ẩn các hàng trong bảng tổng hợp bằng C ++.

// Đường dẫn thư mục nguồn.
StringPtr srcDir = new String("SourceDirectory\\");

// Đường dẫn thư mục đầu ra.
StringPtr outDir = new String("OutputDirectory\\");

// Đường dẫn của tệp excel đầu vào
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Đường dẫn của tệp excel đầu ra
StringPtr outputHiddenRowPivotTable = outDir->StringAppend(new String("outputHiddenRowPivotTable.xlsx"));

// Tải tệp excel mẫu
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Truy cập trang tính đầu tiên
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Truy cập bảng tổng hợp
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Nhận phạm vi nội dung bảng tổng hợp
intrusive_ptr<ICellArea> dataBodyRange = pivotTable->GetIDataBodyRange();

// Hàng bắt đầu của bảng tổng hợp
int currentRow = 5;

// Hàng kết thúc của bảng tổng hợp
int rowsUsed = dataBodyRange->GetendRow();

// Lặp lại các hàng, so sánh giá trị ô và ẩn các hàng.
for (int i = currentRow; i < rowsUsed; i++) {
	intrusive_ptr<ICell> cell = worksheet->GetICells()->GetICell(i, 4);
	if (strcmp(cell->GetStringValue()->charValue(), "Orange") == 0) {
		worksheet->GetICells()->HideRow(i);
	}
}

// Làm mới và tính toán dữ liệu trong bảng tổng hợp.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Lưu tệp excel đầu ra
workbook->Save(outputHiddenRowPivotTable);
Hình ảnh của bảng tổng hợp với một hàng ẩn

Hình ảnh của bảng tổng hợp với một hàng ẩn

Thao tác dữ liệu bảng tổng hợp bằng C ++

Bạn cũng có thể thao tác dữ liệu của bảng tổng hợp hiện có bằng cách sử dụng Aspose.Cells cho C ++ API. Trong ví dụ sau, chúng tôi sẽ thay thế văn bản “Apple” trong ô “A2” bằng “Orange” và phản ánh sự thay đổi trong bảng tổng hợp. Sau đây là các bước để thao tác với dữ liệu bảng tổng hợp.

Mã mẫu sau đây cho thấy cách cập nhật dữ liệu của bảng tổng hợp bằng C ++.

// Đường dẫn thư mục nguồn.
StringPtr srcDir = new String("SourceDirectory\\");

// Đường dẫn thư mục đầu ra.
StringPtr outDir = new String("OutputDirectory\\");

// Đường dẫn của tệp excel đầu vào
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Đường dẫn của tệp excel đầu ra
StringPtr outputManipulatePivotTable = outDir->StringAppend(new String("outputManipulatePivotTable.xlsx"));

// Tải tệp excel mẫu
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Truy cập trang tính đầu tiên
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Thay đổi giá trị của ô A2 nằm bên trong dữ liệu nguồn của bảng tổng hợp
intrusive_ptr<String> str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);

// Truy cập bảng tổng hợp, làm mới và tính toán nó
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
pivotTable->RefreshData();
pivotTable->CalculateData();

// Lưu tệp excel đầu ra
workbook->Save(outputManipulatePivotTable);
Bảng tổng hợp hiển thị dữ liệu cập nhật

Bảng tổng hợp hiển thị dữ liệu cập nhật

Nhận giấy phép miễn phí

Để dùng thử API mà không có giới hạn đánh giá, bạn có thể yêu cầu giấy phép tạm thời miễn phí.

Sự kết luận

Trong bài viết này, bạn đã học cách làm việc với bảng tổng hợp trong tệp Excel bằng C ++. Cụ thể, bạn đã học cách tạo bảng tổng hợp và sắp xếp, ẩn và cập nhật dữ liệu trong bảng tổng hợp bằng C ++. Aspose.Cells cho C ++ là một API rộng lớn cung cấp một loạt các tính năng bổ sung để làm việc với các tệp Excel. Bạn có thể khám phá API chi tiết bằng cách truy cập tài liệu chính thức. Trong trường hợp có bất kỳ câu hỏi nào, vui lòng liên hệ với chúng tôi trên diễn đàn hỗ trợ miễn phí của chúng tôi.

Xem thêm