Сводные таблицы упорядочивают данные, чтобы представить их осмысленным образом. Они предоставляют различные варианты сортировки и предоставляют суммы, средние значения или другую статистику путем группировки данных. Это важный инструмент для анализа данных и основная часть 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 с использованием С++

В следующем примере мы отсортируем первый столбец сводной таблицы в порядке убывания. Ниже приведены шаги для сортировки данных в сводной таблице.

В следующем примере кода показано, как сортировать сводную таблицу в файле 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++

С помощью Aspose.Cells for C++ API вы также можете скрыть строки в сводной таблице. В следующем примере мы скроем строку с меткой строки «Оранжевый». Ниже приведены шаги, чтобы скрыть строки в сводной таблице.

В следующем примере кода показано, как скрыть строки в сводной таблице с помощью 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, посетив официальную документацию. Если у вас возникнут вопросы, свяжитесь с нами на нашем бесплатном форуме поддержки.

Смотрите также