Сводные таблицы упорядочивают данные, чтобы представить их осмысленным образом. Они предоставляют различные варианты сортировки и предоставляют суммы, средние значения или другую статистику путем группировки данных. Это важный инструмент для анализа данных и основная часть MS Excel. Вы можете столкнуться с ситуациями, когда вам нужно программно создавать сводные таблицы и управлять ими. С этой целью эта статья научит вас работать со сводными таблицами в файлах Excel с помощью C++.
- C++ API для работы со сводными таблицами в файлах Excel
- Создайте сводную таблицу в файле Excel с помощью C++
- Сортировка сводной таблицы в файле Excel с использованием С++
- Скрыть строки в сводной таблице с помощью 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(intrusiveptrAspose::Cells::Systems::String sourceData, интрузивные_путиAspose::Cells::Systems::String destCellName, intrusiveptrAspose::Cells::Systems::String имя_таблицы) 6 метод.
- Чтобы получить доступ к сводной таблице, используйте метод IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Манипулируйте полями и задавайте стиль сводной таблицы.
- Наконец, сохраните файл Excel с помощью IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String имя_файла) метод.
В следующем примере кода показано, как создать сводную таблицу в файле 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, используя класс 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 имя_файла) метод.
В следующем примере кода показано, как сортировать сводную таблицу в файле 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 вы также можете скрыть строки в сводной таблице. В следующем примере мы скроем строку с меткой строки «Оранжевый». Ниже приведены шаги, чтобы скрыть строки в сводной таблице.
- Во-первых, загрузите образец файла 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 имя_файла) метод.
В следующем примере кода показано, как скрыть строки в сводной таблице с помощью 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 имя_файла).
В следующем примере кода показано, как обновить данные сводной таблицы с помощью 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, посетив официальную документацию. Если у вас возникнут вопросы, свяжитесь с нами на нашем бесплатном форуме поддержки.