Зведені таблиці змінюють порядок даних, щоб представити їх у змістовний спосіб. Вони надають різні варіанти сортування та надають суми, середні значення чи іншу статистику шляхом групування даних. Це важливий інструмент для аналізу даних і фундаментальна частина MS Excel. Ви можете опинитися в ситуаціях, коли вам потрібно програмно створювати зведені таблиці та керувати ними. З цією метою ця стаття навчить вас працювати зі зведеними таблицями у файлах Excel за допомогою 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.

У наведеному нижче прикладі коду показано, як створити зведену таблицю у файлі 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 за допомогою 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++ ви також можете приховати рядки у зведеній таблиці. У наступному прикладі ми приховаємо рядок із міткою рядка «Помаранчевий». Нижче наведено кроки, щоб приховати рядки у зведеній таблиці.

У наступному прикладі коду показано, як приховати рядки у зведеній таблиці за допомогою 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» і відобразимо зміну у зведеній таблиці. Нижче наведено кроки для роботи з даними зведеної таблиці.

Наведений нижче приклад коду показує, як оновити дані зведеної таблиці за допомогою 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, відвідавши офіційну документацію. У разі будь-яких запитань зв’яжіться з нами на нашому безкоштовному форумі підтримки.

Дивись також