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 Pivot Table trong tệp Excel
- Tạo bảng tổng hợp trong tệp Excel bằng C ++
- Sắp xếp Pivot Table trong Tệp Excel bằng C ++
- Ẩn hàng trong bảng tổng hợp bằng C ++
- Thao tác dữ liệu bảng tổng hợp 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.
- Đầu tiên, tạo một thể hiện của lớp IWorkbook để đại diện cho tệp Excel mới.
- Truy cập trang tính mà bạn muốn chèn bảng tổng hợp bằng cách sử dụng phương thức IWorkbook-> GetIWorksheets() -> GetObjectByIndex (Aspose :: Cells :: Systems :: Int32).
- Thêm dữ liệu mẫu cho bảng tổng hợp.
- Thêm bảng tổng hợp bằng cách sử dụng IWorksheet-> GetIPivotTables() -> Thêm (intrusiveptrAspose::Cells::Systems::String sourceData, intrusiveptrAspose::Cells::Systems::String destCellName, intrusiveptrAspose::Cells::Systems::String tableName) phương thức.
- Để truy cập bảng tổng hợp, hãy sử dụng phương thức IWorksheet-> GetIPivotTables() -> GetObjectByIndex (Aspose :: Cells :: Systems :: Int32 index).
- Thao tác với các trường và đặt kiểu của bảng tổng hợp.
- Cuối cùng, lưu tệp Excel bằng cách sử dụng IWorkbook-> Save (intrusiveptrAspose::Cells::Systems::String fileName) phương thức.
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")));
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.
- Đầu tiên, tải tệp Excel mẫu bằng lớp IWorkbook.
- Truy xuất trang tính có chứa bảng tổng hợp bằng phương thức IWorkbook-> GetIWorksheets() -> GetObjectByIndex (Aspose :: Cells :: Systems :: Int32 index).
- Truy cập bảng tổng hợp bằng phương thức IWorksheet-> GetIPivotTables() -> GetObjectByIndex (Aspose :: Cells :: Systems :: Int32 index).
- Lấy trường hàng và sắp xếp bảng tổng hợp bằng các phương thức IPivotField-> SetAutoSort (bool value) và IPivotField-> SetAscendSort (bool value).
- Làm mới nội dung của bảng tổng hợp và tính toán dữ liệu bằng cách sử dụng các phương thức IPivotTable-> RefreshData() và IPivotTable-> CalculData() tương ứng.
- Cuối cùng, lưu tệp Excel bằng cách sử dụng IWorkbook-> Save (intrusiveptrAspose::Cells::Systems::String fileName) phương thức.
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);
Ẩ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.
- Đầu tiên, tải tệp Excel mẫu bằng lớp IWorkbook.
- Truy xuất trang tính có chứa bảng tổng hợp bằng phương thức IWorkbook-> GetIWorksheets() -> GetObjectByIndex (Aspose :: Cells :: Systems :: Int32 index).
- Truy cập bảng tổng hợp bằng phương thức IWorksheet-> GetIPivotTables() -> GetObjectByIndex (Aspose :: Cells :: Systems :: Int32 index).
- Nhận phạm vi nội dung dữ liệu bảng tổng hợp bằng cách sử dụng phương pháp IPivotTable-> GetIDataBodyRange().
- Lặp lại qua các hàng của bảng tổng hợp và ẩn các hàng đáp ứng tiêu chí của bạn.
- Làm mới nội dung của bảng tổng hợp và tính toán dữ liệu bằng các phương thức IPivotTable-> RefreshData() và IPivotTable-> CalculData() tương ứng.
- Cuối cùng, lưu tệp Excel bằng cách sử dụng IWorkbook-> Save (intrusiveptrAspose::Cells::Systems::String fileName) phương thức.
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);
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.
- Đầu tiên, tải tệp Excel mẫu bằng lớp IWorkbook.
- Truy xuất trang tính có chứa dữ liệu bảng tổng hợp bằng phương thức IWorkbook-> GetIWorksheets() -> GetObjectByIndex (Aspose :: Cells :: Systems :: Int32 index).
- Cập nhật dữ liệu của bảng tổng hợp theo yêu cầu của bạn.
- Để truy cập bảng tổng hợp, hãy sử dụng phương thức IWorksheet-> GetIPivotTables() -> GetObjectByIndex (Aspose :: Cells :: Systems :: Int32 index).
- Làm mới nội dung của bảng tổng hợp và tính toán dữ liệu bằng các phương thức IPivotTable-> RefreshData() và IPivotTable-> CompareData() tương ứng.
- Cuối cùng, lưu tệp Excel bằng cách sử dụng IWorkbook-> Save (intrusiveptrAspose::Cells::Systems::String fileName) phương thức.
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);
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.