Pivottabeller arrangerar om data för att representera dem på ett meningsfullt sätt. De tillhandahåller olika sorteringsalternativ och ger summor, medelvärden eller annan statistik genom att gruppera data tillsammans. Det är ett viktigt verktyg för dataanalys och är en grundläggande del av MS Excel. Du kan hamna i scenarier där du behöver skapa och manipulera pivottabeller programmatiskt. För detta ändamål kommer den här artikeln att lära dig hur du arbetar med pivottabeller i Excel-filer med C++.

C++ API för att arbeta med pivottabeller i Excel-filer

Aspose.Cells for C++ är ett inbyggt C++-bibliotek som låter dig skapa, läsa och uppdatera Excel-filer utan att Microsoft Excel behöver installeras. API:et stöder även arbete med pivottabeller i Excel-filer. Du kan antingen installera API:t genom NuGet eller ladda ner det direkt från avsnittet Nedladdningar.

PM> Install-Package Aspose.Cells.Cpp

Skapa en pivottabell i en Excel-fil med C++

I följande exempel kommer vi att skapa en ny Excel-fil, infoga exempeldata i den och skapa en pivottabell. Filen som genereras i detta exempel kommer att användas som källfil för andra exempel. Följande är stegen för att skapa en pivottabell i en Excel-fil.

Följande exempelkod visar hur man skapar en pivottabell i en Excel-fil med C++.

// Källkatalogens sökväg.
StringPtr srcDir = new String("SourceDirectory\\");

// Utdatakatalogsökväg.
StringPtr outDir = new String("OutputDirectory\\");

// Skapa en instans av IWorkbook-klassen
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Öppna det första arbetsbladet
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Lägg till källdata för pivottabellen
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);

// Lägg till pivottabell
int idx = worksheet->GetIPivotTables()->Add(new String("A1:C4"), new String("E5"), new String("MyPivotTable"));

// Åtkomst till skapad pivottabell
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(idx);

// Manipulera pivottabellrader, kolumner och datafält
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());

// Ställ in pivottabellstilen
pivotTable->SetPivotTableStyleType(PivotTableStyleType_PivotTableStyleMedium9);

// Spara den utgående excel-filen
workbook->Save(outDir->StringAppend(new String("outputCreatePivotTable.xlsx")));
Bild av pivottabellen skapad av exempelkoden

Bild av pivottabellen skapad av exempelkoden

Sortera pivottabell i en Excel-fil med C++

I följande exempel kommer vi att sortera den första kolumnen i pivottabellen i fallande ordning. Följande är stegen för att sortera data i en pivottabell.

Följande exempelkod visar hur man sorterar en pivottabell i en Excel-fil med C++.

// Källkatalogens sökväg.
StringPtr srcDir = new String("SourceDirectory\\");

// Utdatakatalogsökväg.
StringPtr outDir = new String("OutputDirectory\\");

// Sökvägen till indata excel-filen
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Sökväg för utdata excel-filen
StringPtr outputSortedPivotTable = outDir->StringAppend(new String("outputSortedPivotTable.xlsx"));

// Ladda excel-exempelfilen
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Öppna det första arbetsbladet
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Gå till pivottabellen
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Ställ in pivottabellsortering
pivotTable->AddFieldToArea(PivotFieldType_Row, 0);
intrusive_ptr<IPivotField> pivotField = pivotTable->GetIRowFields()->GetObjectByIndex(0);
pivotField->SetAutoSort(true);
pivotField->SetAscendSort(false);

// Uppdatera och beräkna data i pivottabellen.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Spara den utgående excel-filen
workbook->Save(outputSortedPivotTable);
Bild av den sorterade pivottabellen som genereras av exempelkoden

Bild av den sorterade pivottabellen som genereras av exempelkoden

Göm rader i en pivottabell med C++

Med Aspose.Cells for C++ API kan du även dölja raderna i en pivottabell. I följande exempel kommer vi att dölja raden med radetiketten “Orange”. Följande är stegen för att dölja rader i en pivottabell.

Följande exempelkod visar hur man döljer rader i en pivottabell med C++.

// Källkatalogens sökväg.
StringPtr srcDir = new String("SourceDirectory\\");

// Utdatakatalogsökväg.
StringPtr outDir = new String("OutputDirectory\\");

// Sökvägen till indata excel-filen
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Sökväg för utdata excel-filen
StringPtr outputHiddenRowPivotTable = outDir->StringAppend(new String("outputHiddenRowPivotTable.xlsx"));

// Ladda excel-exempelfilen
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Öppna det första arbetsbladet
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Gå till pivottabellen
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Skaffa pivotbordskroppar
intrusive_ptr<ICellArea> dataBodyRange = pivotTable->GetIDataBodyRange();

// Pivottabellens startrad
int currentRow = 5;

// Pivottabellens slutrad
int rowsUsed = dataBodyRange->GetendRow();

// Iterera genom raderna, jämför cellvärdet och dölj raderna.
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);
	}
}

// Uppdatera och beräkna data i pivottabellen.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Spara den utgående excel-filen
workbook->Save(outputHiddenRowPivotTable);
Bild av pivottabellen med en dold rad

Bild av pivottabellen med en dold rad

Manipulera pivottabelldata med C++

Du kan också manipulera data från en befintlig pivottabell med Aspose.Cells för C++ API. I följande exempel kommer vi att ersätta texten “Apple” i cell “A2” med “Orange” och återspegla förändringen i pivottabellen. Följande är stegen för att manipulera pivottabelldata.

Följande exempelkod visar hur du uppdaterar data i en pivottabell med C++.

// Källkatalogens sökväg.
StringPtr srcDir = new String("SourceDirectory\\");

// Utdatakatalogsökväg.
StringPtr outDir = new String("OutputDirectory\\");

// Sökvägen till indata excel-filen
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Sökväg för utdata excel-filen
StringPtr outputManipulatePivotTable = outDir->StringAppend(new String("outputManipulatePivotTable.xlsx"));

// Ladda excel-exempelfilen
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Öppna det första arbetsbladet
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Ändra värdet för cell A2 som finns i källdata för pivottabellen
intrusive_ptr<String> str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);

// Öppna pivottabellen, uppdatera och beräkna den
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
pivotTable->RefreshData();
pivotTable->CalculateData();

// Spara den utgående excel-filen
workbook->Save(outputManipulatePivotTable);
Pivottabell som visar uppdaterade data

Pivottabell som visar uppdaterade data

Skaffa en gratis licens

För att prova API utan utvärderingsbegränsningar kan du begära en gratis tillfällig licens.

Slutsats

I den här artikeln har du lärt dig hur du arbetar med pivottabeller i Excel-filer med C++. Specifikt har du lärt dig hur du skapar en pivottabell och sorterar, döljer och uppdaterar data i en pivottabell med C++. Aspose.Cells för C++ är ett stort API som ger en massa ytterligare funktioner för att arbeta med Excel-filer. Du kan utforska API:et i detalj genom att besöka den officiella dokumentationen. Om du har några frågor är du välkommen att kontakta oss på vårt gratis supportforum.

Se även