Зведені таблиці змінюють порядок даних, щоб представити їх у змістовний спосіб. Вони надають різні варіанти сортування та надають суми, середні значення чи іншу статистику шляхом групування даних. Це важливий інструмент для аналізу даних і фундаментальна частина MS Excel. Ви можете опинитися в ситуаціях, коли вам потрібно програмно створювати зведені таблиці та керувати ними. З цією метою ця стаття навчить вас працювати зі зведеними таблицями у файлах Excel за допомогою C++.
- C++ API для роботи зі зведеними таблицями у файлах Excel
- Створіть зведену таблицю у файлі Excel за допомогою C++
- Сортування зведеної таблиці у файлі Excel за допомогою C++
- Приховати рядки у зведеній таблиці за допомогою C++
- Керуйте даними зведеної таблиці за допомогою C++
C++ API для роботи зі зведеними таблицями у файлах Excel
Aspose.Cells for C++ — це рідна бібліотека C++, яка дозволяє створювати, читати й оновлювати файли Excel без встановлення Microsoft Excel. API також підтримує роботу зі зведеними таблицями у файлах Excel. Ви можете встановити API через NuGet або завантажити його безпосередньо з розділу Завантаження.
PM> Install-Package Aspose.Cells.Cpp
Створіть зведену таблицю у файлі Excel за допомогою C++
У наступному прикладі ми створимо новий файл Excel, вставимо в нього зразки даних і створимо зведену таблицю. Файл, створений у цьому прикладі, використовуватиметься як вихідний файл для інших прикладів. Нижче наведено кроки для створення зведеної таблиці у файлі Excel.
- По-перше, створіть екземпляр класу IWorkbook для представлення нового файлу Excel.
- Перейдіть до аркуша, куди ви хочете вставити зведену таблицю, використовуючи метод IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Додайте зразки даних для зведеної таблиці.
- Додайте зведену таблицю за допомогою IWorksheet->GetIPivotTables()->Add(intrusiveptr)Aspose::Cells::Systems::String sourceData, intrusiveptrAspose::Cells::Systems::String destCellName, intrusiveptrAspose::Cells::Systems::String tableName) метод.
- Щоб отримати доступ до зведеної таблиці, скористайтеся методом IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Маніпулюйте полями та встановлюйте стиль зведеної таблиці.
- Нарешті, збережіть файл Excel за допомогою IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String fileName) метод.
У наведеному нижче прикладі коду показано, як створити зведену таблицю у файлі Excel за допомогою C++.
// Шлях вихідного каталогу.
StringPtr srcDir = new String("SourceDirectory\\");
// Шлях вихідного каталогу.
StringPtr outDir = new String("OutputDirectory\\");
// Створіть екземпляр класу IWorkbook
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();
// Доступ до першого аркуша
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);
// Додайте вихідні дані для зведеної таблиці
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);
// Додайте зведену таблицю
int idx = worksheet->GetIPivotTables()->Add(new String("A1:C4"), new String("E5"), new String("MyPivotTable"));
// Доступ до створеної зведеної таблиці
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(idx);
// Керуйте рядками, стовпцями та полями даних зведеної таблиці
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());
// Встановити стиль зведеної таблиці
pivotTable->SetPivotTableStyleType(PivotTableStyleType_PivotTableStyleMedium9);
// Збережіть вихідний файл Excel
workbook->Save(outDir->StringAppend(new String("outputCreatePivotTable.xlsx")));
Сортування зведеної таблиці у файлі Excel за допомогою C++
У наступному прикладі ми відсортуємо перший стовпець зведеної таблиці в порядку спадання. Нижче наведено кроки для сортування даних у зведеній таблиці.
- По-перше, завантажте зразок файлу Excel за допомогою класу IWorkbook.
- Отримайте робочий аркуш, що містить зведену таблицю, за допомогою методу IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Отримайте доступ до зведеної таблиці за допомогою методу IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Отримайте поле рядка та відсортуйте зведену таблицю за допомогою методів IPivotField->SetAutoSort(bool value) і IPivotField->SetAscendSort(bool value).
- Оновіть вміст зведеної таблиці та обчисліть дані за допомогою методів IPivotTable->RefreshData() і IPivotTable->CalculateData() відповідно.
- Нарешті збережіть файл Excel за допомогою IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String fileName) метод.
Наведений нижче приклад коду демонструє, як сортувати зведену таблицю у файлі Excel за допомогою C++.
// Шлях вихідного каталогу.
StringPtr srcDir = new String("SourceDirectory\\");
// Шлях вихідного каталогу.
StringPtr outDir = new String("OutputDirectory\\");
// Шлях до вхідного файлу Excel
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));
// Шлях вихідного файлу Excel
StringPtr outputSortedPivotTable = outDir->StringAppend(new String("outputSortedPivotTable.xlsx"));
// Завантажте зразок файлу Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);
// Доступ до першого аркуша
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);
// Доступ до зведеної таблиці
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
// Налаштувати сортування зведеної таблиці
pivotTable->AddFieldToArea(PivotFieldType_Row, 0);
intrusive_ptr<IPivotField> pivotField = pivotTable->GetIRowFields()->GetObjectByIndex(0);
pivotField->SetAutoSort(true);
pivotField->SetAscendSort(false);
// Оновіть і обчисліть дані у зведеній таблиці.
pivotTable->RefreshData();
pivotTable->CalculateData();
// Збережіть вихідний файл Excel
workbook->Save(outputSortedPivotTable);
Приховування рядків у зведеній таблиці за допомогою C++
За допомогою API Aspose.Cells for C++ ви також можете приховати рядки у зведеній таблиці. У наступному прикладі ми приховаємо рядок із міткою рядка «Помаранчевий». Нижче наведено кроки, щоб приховати рядки у зведеній таблиці.
- По-перше, завантажте зразок файлу Excel за допомогою класу IWorkbook.
- Отримайте робочий аркуш, що містить зведену таблицю, за допомогою методу IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Отримайте доступ до зведеної таблиці за допомогою методу IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Отримайте діапазон тіла даних зведеної таблиці за допомогою методу IPivotTable->GetIDataBodyRange().
- Перебирайте рядки зведеної таблиці та ховайте рядки, які відповідають вашим критеріям.
- Оновіть вміст зведеної таблиці та обчисліть дані за допомогою методів IPivotTable->RefreshData() і IPivotTable->CalculateData() відповідно.
- Нарешті збережіть файл Excel за допомогою IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String fileName) метод.
У наступному прикладі коду показано, як приховати рядки у зведеній таблиці за допомогою C++.
// Шлях вихідного каталогу.
StringPtr srcDir = new String("SourceDirectory\\");
// Шлях вихідного каталогу.
StringPtr outDir = new String("OutputDirectory\\");
// Шлях до вхідного файлу Excel
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));
// Шлях вихідного файлу Excel
StringPtr outputHiddenRowPivotTable = outDir->StringAppend(new String("outputHiddenRowPivotTable.xlsx"));
// Завантажте зразок файлу Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);
// Доступ до першого аркуша
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);
// Доступ до зведеної таблиці
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
// Отримати діапазон тіла зведеної таблиці
intrusive_ptr<ICellArea> dataBodyRange = pivotTable->GetIDataBodyRange();
// Початковий рядок зведеної таблиці
int currentRow = 5;
// Кінцевий рядок зведеної таблиці
int rowsUsed = dataBodyRange->GetendRow();
// Перебирайте рядки, порівнюйте значення клітинки та ховайте рядки.
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);
}
}
// Оновіть і обчисліть дані у зведеній таблиці.
pivotTable->RefreshData();
pivotTable->CalculateData();
// Збережіть вихідний файл Excel
workbook->Save(outputHiddenRowPivotTable);
Керуйте даними зведеної таблиці за допомогою C++
Ви також можете маніпулювати даними наявної зведеної таблиці за допомогою Aspose.Cells for C++ API. У наступному прикладі ми замінимо текст «Apple» у клітинці «A2» на «Orange» і відобразимо зміну у зведеній таблиці. Нижче наведено кроки для роботи з даними зведеної таблиці.
- По-перше, завантажте зразок файлу Excel за допомогою класу IWorkbook.
- Отримайте робочий аркуш, що містить дані зведеної таблиці, за допомогою методу IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Оновіть дані зведеної таблиці відповідно до ваших вимог.
- Щоб отримати доступ до зведеної таблиці, скористайтеся методом IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Оновіть вміст зведеної таблиці та обчисліть дані за допомогою методів IPivotTable->RefreshData() і IPivotTable->CalculateData() відповідно.
- Нарешті, збережіть файл Excel за допомогою IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String fileName) метод.
Наведений нижче приклад коду показує, як оновити дані зведеної таблиці за допомогою C++.
// Шлях вихідного каталогу.
StringPtr srcDir = new String("SourceDirectory\\");
// Шлях вихідного каталогу.
StringPtr outDir = new String("OutputDirectory\\");
// Шлях до вхідного файлу Excel
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));
// Шлях вихідного файлу Excel
StringPtr outputManipulatePivotTable = outDir->StringAppend(new String("outputManipulatePivotTable.xlsx"));
// Завантажте зразок файлу Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);
// Доступ до першого аркуша
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);
// Змініть значення клітинки A2, яка знаходиться всередині вихідних даних зведеної таблиці
intrusive_ptr<String> str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);
// Перейдіть до зведеної таблиці, оновіть і обчисліть її
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
pivotTable->RefreshData();
pivotTable->CalculateData();
// Збережіть вихідний файл Excel
workbook->Save(outputManipulatePivotTable);
Отримайте безкоштовну ліцензію
Щоб випробувати API без оціночних обмежень, ви можете подати запит на безкоштовну тимчасову ліцензію.
Висновок
У цій статті ви дізналися, як працювати зі зведеними таблицями у файлах Excel за допомогою C++. Зокрема, ви навчилися створювати зведену таблицю та сортувати, приховувати та оновлювати дані у зведеній таблиці за допомогою C++. Aspose.Cells for C++ — це величезний API, який надає купу додаткових функцій для роботи з файлами Excel. Ви можете детально вивчити API, відвідавши офіційну документацію. У разі будь-яких запитань зв’яжіться з нами на нашому безкоштовному форумі підтримки.