Le tabelle pivot riorganizzano i dati per rappresentarli in modo significativo. Forniscono diverse opzioni di ordinamento e forniscono somme, medie o altre statistiche raggruppando i dati insieme. È uno strumento essenziale per l’analisi dei dati ed è una parte fondamentale di MS Excel. Potresti trovarti in scenari in cui devi creare e manipolare tabelle pivot a livello di codice. A tal fine, questo articolo ti insegnerà come lavorare con le tabelle pivot nei file Excel utilizzando C++.

API C++ per l’utilizzo delle tabelle pivot nei file di Excel

Aspose.Cells for C++ è una libreria C++ nativa che consente di creare, leggere e aggiornare file Excel senza richiedere l’installazione di Microsoft Excel. L’API supporta anche l’utilizzo delle tabelle pivot nei file Excel. Puoi installare l’API tramite NuGet o scaricarla direttamente dalla sezione Download.

PM> Install-Package Aspose.Cells.Cpp

Crea una tabella pivot in un file Excel usando C++

Nell’esempio seguente, creeremo un nuovo file Excel, inseriremo dati di esempio in esso e creeremo una tabella pivot. Il file generato in questo esempio verrà utilizzato come file di origine per altri esempi. Di seguito sono riportati i passaggi per creare una tabella pivot in un file Excel.

Il codice di esempio seguente mostra come creare una tabella pivot in un file di Excel usando C++.

// Percorso della directory di origine.
StringPtr srcDir = new String("SourceDirectory\\");

// Percorso della directory di output.
StringPtr outDir = new String("OutputDirectory\\");

// Crea un'istanza della classe IWorkbook
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Accedi al primo foglio di lavoro
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Aggiungi i dati di origine per la tabella pivot
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);

// Aggiungi tabella pivot
int idx = worksheet->GetIPivotTables()->Add(new String("A1:C4"), new String("E5"), new String("MyPivotTable"));

// Accedi alla tabella pivot creata
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(idx);

// Manipola righe, colonne e campi dati della tabella pivot
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());

// Imposta lo stile della tabella pivot
pivotTable->SetPivotTableStyleType(PivotTableStyleType_PivotTableStyleMedium9);

// Salva il file excel di output
workbook->Save(outDir->StringAppend(new String("outputCreatePivotTable.xlsx")));
Immagine della tabella pivot creata dal codice di esempio

Immagine della tabella pivot creata dal codice di esempio

Ordina la tabella pivot in un file Excel usando C++

Nell’esempio seguente, ordineremo la prima colonna della tabella pivot in ordine decrescente. Di seguito sono riportati i passaggi per ordinare i dati in una tabella pivot.

Il codice di esempio seguente illustra come ordinare una tabella pivot in un file di Excel usando C++.

// Percorso della directory di origine.
StringPtr srcDir = new String("SourceDirectory\\");

// Percorso della directory di output.
StringPtr outDir = new String("OutputDirectory\\");

// Percorso del file excel di input
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Percorso del file excel di output
StringPtr outputSortedPivotTable = outDir->StringAppend(new String("outputSortedPivotTable.xlsx"));

// Carica il file excel di esempio
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Accedi al primo foglio di lavoro
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Accedi alla tabella pivot
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Imposta l'ordinamento delle tabelle pivot
pivotTable->AddFieldToArea(PivotFieldType_Row, 0);
intrusive_ptr<IPivotField> pivotField = pivotTable->GetIRowFields()->GetObjectByIndex(0);
pivotField->SetAutoSort(true);
pivotField->SetAscendSort(false);

// Aggiorna e calcola i dati nella tabella pivot.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Salva il file excel di output
workbook->Save(outputSortedPivotTable);
Immagine della tabella pivot ordinata generata dal codice di esempio

Immagine della tabella pivot ordinata generata dal codice di esempio

Nascondi le righe in una tabella pivot usando C++

Con Aspose.Cells per l’API C++, puoi anche nascondere le righe in una tabella pivot. Nell’esempio seguente, nasconderemo la riga con l’etichetta della riga “Arancione”. Di seguito sono riportati i passaggi per nascondere le righe in una tabella pivot.

Il codice di esempio seguente mostra come nascondere le righe in una tabella pivot usando C++.

// Percorso della directory di origine.
StringPtr srcDir = new String("SourceDirectory\\");

// Percorso della directory di output.
StringPtr outDir = new String("OutputDirectory\\");

// Percorso del file excel di input
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Percorso del file excel di output
StringPtr outputHiddenRowPivotTable = outDir->StringAppend(new String("outputHiddenRowPivotTable.xlsx"));

// Carica il file excel di esempio
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Accedi al primo foglio di lavoro
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Accedi alla tabella pivot
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Ottieni l'intervallo del corpo della tabella pivot
intrusive_ptr<ICellArea> dataBodyRange = pivotTable->GetIDataBodyRange();

// Riga iniziale della tabella pivot
int currentRow = 5;

// Riga finale della tabella pivot
int rowsUsed = dataBodyRange->GetendRow();

// Scorri le righe, confronta il valore della cella e nascondi le righe.
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);
	}
}

// Aggiorna e calcola i dati nella tabella pivot.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Salva il file excel di output
workbook->Save(outputHiddenRowPivotTable);
Immagine della tabella pivot con una riga nascosta

Immagine della tabella pivot con una riga nascosta

Manipola i dati della tabella pivot usando C++

Puoi anche manipolare i dati di una tabella pivot esistente usando Aspose.Cells per l’API C++. Nell’esempio seguente, sostituiremo il testo “Apple” nella cella “A2” con “Arancione” e rifletteremo la modifica nella tabella pivot. Di seguito sono riportati i passaggi per manipolare i dati della tabella pivot.

Il codice di esempio seguente mostra come aggiornare i dati di una tabella pivot usando C++.

// Percorso della directory di origine.
StringPtr srcDir = new String("SourceDirectory\\");

// Percorso della directory di output.
StringPtr outDir = new String("OutputDirectory\\");

// Percorso del file excel di input
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Percorso del file excel di output
StringPtr outputManipulatePivotTable = outDir->StringAppend(new String("outputManipulatePivotTable.xlsx"));

// Carica il file excel di esempio
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Accedi al primo foglio di lavoro
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Modifica il valore della cella A2 che si trova all'interno dei dati di origine della tabella pivot
intrusive_ptr<String> str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);

// Accedi alla tabella pivot, aggiornala e calcolala
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
pivotTable->RefreshData();
pivotTable->CalculateData();

// Salva il file excel di output
workbook->Save(outputManipulatePivotTable);
Tabella pivot che mostra i dati aggiornati

Tabella pivot che mostra i dati aggiornati

Ottieni una licenza gratuita

Per provare l’API senza limitazioni di valutazione, puoi richiedere una licenza temporanea gratuita.

Conclusione

In questo articolo hai imparato a lavorare con le tabelle pivot nei file Excel usando C++. In particolare, hai imparato come creare una tabella pivot e ordinare, nascondere e aggiornare i dati in una tabella pivot utilizzando C++. Aspose.Cells per C++ è una vasta API che fornisce una serie di funzionalità aggiuntive per lavorare con i file Excel. Puoi esplorare l’API in dettaglio visitando la documentazione ufficiale. In caso di domande, non esitare a contattarci sul nostro forum di supporto gratuito.

Guarda anche