Formatting Pivot Table with C++
Pivot Table Appearance
How to Create a Pivot Table explains how to create a simple pivot table. This article describes how to customize a pivot table’s appearance by setting various properties:
- Pivot table format options
- Pivot fields format options
- Data field format options
Setting Pivot Table Format Options
The PivotTable class controls the overall pivot table and can be formatted in a number of ways.
Setting the AutoFormat Type
Microsoft Excel offers a number of different pre-set report formats. Aspose.Cells supports these formatting options too. To access them:
- Set PivotTable.IsAutoFormat to true.
- Assign a formatting option from the PivotTableAutoFormatType enumeration.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Pivot;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Path of input excel file
U16String inputFilePath = srcDir + u"Book1.xls";
// Path of output excel file
U16String outputFilePath = outDir + u"output.xls";
// Load a template file
Workbook workbook(inputFilePath);
int pivotindex = 0;
// Get the first worksheet
Worksheet worksheet = workbook.GetWorksheets().Get(0);
// Accessing the PivotTable
PivotTable pivotTable = worksheet.GetPivotTables().Get(pivotindex);
// Setting the PivotTable report is automatically formatted
pivotTable.SetIsAutoFormat(true);
// Setting the PivotTable autoformat type
pivotTable.SetAutoFormatType(PivotTableAutoFormatType::Report5);
// Saving the Excel file
workbook.Save(outputFilePath);
std::cout << "PivotTable formatted successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
Setting Format Options
The code sample below shows how to format the pivot table to show grand totals for rows and columns, and how to set the report’s field order. It also shows how to set a custom string for null values.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Pivot;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Path of input Excel file
U16String inputFilePath = srcDir + u"Book1.xls";
// Path of output Excel file
U16String outputFilePath = outDir + u"output.xls";
// Load a template file
Workbook workbook(inputFilePath);
// Get the first worksheet
Worksheet worksheet = workbook.GetWorksheets().Get(0);
int pivotindex = 0;
// Accessing the PivotTable
PivotTable pivotTable = worksheet.GetPivotTables().Get(pivotindex);
// Setting the PivotTable report shows grand totals for rows.
pivotTable.SetShowRowGrandTotals(true);
// Setting the PivotTable report shows grand totals for columns.
pivotTable.SetShowColumnGrandTotals(true);
// Setting the PivotTable report displays a custom string in cells that contain null values.
pivotTable.SetDisplayNullString(true);
pivotTable.SetNullString(u"null");
// Setting the PivotTable report's layout
pivotTable.SetPageFieldOrder(PrintOrderType::DownThenOver);
// Saving the Excel file
workbook.Save(outputFilePath);
std::cout << "PivotTable settings applied successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
Formatting Look and Feel Manually
To format how the pivot table report looks manually, instead of using pre-set report formats, use the PivotTable.Format() and PivotTable.FormatAll() methods. Create a style object for your desired formatting, for example:
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Path of input excel file
U16String inputFilePath = srcDir + u"Book1.xls";
// Path of output excel file
U16String outputFilePath = outDir + u"output.xls";
// Load a template file
Workbook workbook(inputFilePath);
// Get the first worksheet
Worksheet worksheet = workbook.GetWorksheets().Get(0);
auto pivot = worksheet.GetPivotTables().Get(0);
// Set pivot table style
pivot.SetPivotTableStyleType(PivotTableStyleType::PivotTableStyleDark1);
// Create a new style
Style style = workbook.CreateStyle();
style.GetFont().SetName(u"Arial Black");
style.SetForegroundColor(Color::Yellow());
style.SetPattern(BackgroundType::Solid);
// Apply style to pivot table
pivot.FormatAll(style);
// Save the Excel file
workbook.Save(outputFilePath);
std::cout << "Pivot table style applied successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
Setting Pivot Field Format Options
The PivotField class represents a field in a pivot table and can be formatted in a number of ways. The code sample below shows how to:
- Access row fields.
- Setting subtotals.
- Setting autosort.
- Setting autoshow.
Setting Row/Column/Page Fields Format
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Pivot;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Load a template file
Workbook workbook(srcDir + u"Book1.xls");
// Get the first worksheet
Worksheet worksheet = workbook.GetWorksheets().Get(0);
int pivotindex = 0;
// Accessing the PivotTable
PivotTable pivotTable = worksheet.GetPivotTables().Get(pivotindex);
// Setting the PivotTable report shows grand totals for rows.
pivotTable.SetShowRowGrandTotals(true);
// Accessing the row fields.
PivotFieldCollection pivotFields = pivotTable.GetRowFields();
// Accessing the first row field in the row fields.
PivotField pivotField = pivotFields.Get(0);
// Setting Subtotals.
pivotField.SetSubtotals(PivotFieldSubtotalType::Sum, true);
pivotField.SetSubtotals(PivotFieldSubtotalType::Count, true);
// Setting autosort options.
// Setting the field auto sort.
pivotField.SetIsAutoSort(true);
// Setting the field auto sort ascend.
pivotField.SetIsAscendSort(true);
// Setting the field auto sort using the field itself.
pivotField.SetAutoSortField(-5);
// Setting autoShow options.
// Setting the field auto show.
pivotField.SetIsAutoShow(true);
// Setting the field auto show ascend.
pivotField.SetIsAscendShow(false);
// Setting the auto show using field(data field).
pivotField.SetAutoShowField(0);
// Saving the Excel file
workbook.Save(outDir + u"output.xls");
std::cout << "PivotTable settings applied successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
Setting Data Fields Format
The code sample below shows how to set display formats and number format for data fields.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Load a template file
U16String inputFilePath = srcDir + u"Book1.xls";
Workbook workbook(inputFilePath);
// Get the first worksheet
Worksheet worksheet = workbook.GetWorksheets().Get(0);
int pivotindex = 0;
// Accessing the PivotTable
PivotTable pivotTable = worksheet.GetPivotTables().Get(pivotindex);
// Accessing the data fields
PivotFieldCollection pivotFields = pivotTable.GetDataFields();
// Accessing the first data field in the data fields
PivotField pivotField = pivotFields.Get(0);
// Setting data display format
pivotField.GetShowValuesSetting().SetCalculationType(PivotFieldDataDisplayFormat::PercentageOf);
// Setting the base field
pivotField.GetShowValuesSetting().SetBaseFieldIndex(1);
// Setting the base item
pivotField.GetShowValuesSetting().SetBaseItemPositionType(PivotItemPositionType::Next);
// Setting number format
pivotField.SetNumber(10);
// Saving the Excel file
U16String outputFilePath = outDir + u"output.xls";
workbook.Save(outputFilePath);
std::cout << "Pivot table settings applied successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
Clearing Pivot Fields
The PivotFieldCollection has a method named Clear() that allows you to clear pivot fields. Use it when you want to clear all the pivot fields in the areas, for example, page, column, row or data. The code sample below shows how to clear all the pivot fields in a data area.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Path of input excel file
U16String inputFilePath = srcDir + u"Book1.xls";
// Path of output excel file
U16String outputFilePath = outDir + u"output.xls";
// Load a template file
Workbook workbook(inputFilePath);
// Get the first worksheet
Worksheet sheet = workbook.GetWorksheets().Get(0);
// Get the pivot tables in the sheet
PivotTableCollection pivotTables = sheet.GetPivotTables();
// Get the first PivotTable
PivotTable pivotTable = pivotTables.Get(0);
// Clear all the data fields
pivotTable.GetDataFields().Clear();
// Add new data field
pivotTable.AddFieldToArea(PivotFieldType::Data, u"Betrag Netto FW");
// Set the refresh data flag off
pivotTable.SetRefreshDataFlag(false);
// Refresh and calculate the pivot table data
pivotTable.RefreshData();
pivotTable.CalculateData();
// Saving the Excel file
workbook.Save(outputFilePath);
std::cout << "Pivot table updated and saved successfully!" << std::endl;
Aspose::Cells::Cleanup();
}