Kontingenční tabulky uspořádají data tak, aby je reprezentovala smysluplným způsobem. Poskytují různé možnosti řazení a poskytují součty, průměry nebo jiné statistiky seskupováním dat dohromady. Je základním nástrojem pro analýzu dat a je základní součástí MS Excel. Můžete se ocitnout ve scénářích, kdy potřebujete vytvářet a manipulovat s kontingenčními tabulkami programově. Za tímto účelem vás tento článek naučí pracovat s kontingenčními tabulkami v souborech Excel pomocí C++.

C++ API pro práci s kontingenčními tabulkami v souborech aplikace Excel

Aspose.Cells for C++ je nativní knihovna C++, která umožňuje vytvářet, číst a aktualizovat soubory aplikace Excel bez nutnosti instalace aplikace Microsoft Excel. Rozhraní API také podporuje práci s kontingenčními tabulkami v souborech aplikace Excel. Rozhraní API můžete nainstalovat buď prostřednictvím NuGet, nebo si jej stáhnout přímo ze sekce Downloads.

PM> Install-Package Aspose.Cells.Cpp

Vytvořte kontingenční tabulku v souboru aplikace Excel pomocí C++

V následujícím příkladu vytvoříme nový soubor Excel, vložíme do něj ukázková data a vytvoříme kontingenční tabulku. Soubor vygenerovaný v tomto příkladu bude použit jako zdrojový soubor pro další příklady. Následují kroky k vytvoření kontingenční tabulky v souboru aplikace Excel.

Následující ukázkový kód ukazuje, jak vytvořit kontingenční tabulku v souboru aplikace Excel pomocí C++.

// Cesta ke zdrojovému adresáři.
StringPtr srcDir = new String("SourceDirectory\\");

// Cesta výstupního adresáře.
StringPtr outDir = new String("OutputDirectory\\");

// Vytvořte instanci třídy IWorkbook
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Otevřete první pracovní list
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Přidejte zdrojová data pro kontingenční tabulku
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);

// Přidat kontingenční tabulku
int idx = worksheet->GetIPivotTables()->Add(new String("A1:C4"), new String("E5"), new String("MyPivotTable"));

// Přístup k vytvořené kontingenční tabulce
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(idx);

// Manipulujte s řádky, sloupci a datovými poli kontingenční tabulky
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());

// Nastavte styl kontingenční tabulky
pivotTable->SetPivotTableStyleType(PivotTableStyleType_PivotTableStyleMedium9);

// Uložte výstupní excelový soubor
workbook->Save(outDir->StringAppend(new String("outputCreatePivotTable.xlsx")));
Obrázek kontingenční tabulky vytvořený ukázkovým kódem

Obrázek kontingenční tabulky vytvořený ukázkovým kódem

Řazení kontingenční tabulky v souboru aplikace Excel pomocí C++

V následujícím příkladu seřadíme první sloupec kontingenční tabulky v sestupném pořadí. Následují kroky k řazení dat v kontingenční tabulce.

Následující ukázkový kód ukazuje, jak seřadit kontingenční tabulku v souboru aplikace Excel pomocí C++.

// Cesta ke zdrojovému adresáři.
StringPtr srcDir = new String("SourceDirectory\\");

// Cesta výstupního adresáře.
StringPtr outDir = new String("OutputDirectory\\");

// Cesta ke vstupnímu excelovému souboru
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Cesta k výstupnímu excelovému souboru
StringPtr outputSortedPivotTable = outDir->StringAppend(new String("outputSortedPivotTable.xlsx"));

// Načtěte ukázkový excelový soubor
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Otevřete první pracovní list
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Vstupte do kontingenční tabulky
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Nastavte řazení kontingenční tabulky
pivotTable->AddFieldToArea(PivotFieldType_Row, 0);
intrusive_ptr<IPivotField> pivotField = pivotTable->GetIRowFields()->GetObjectByIndex(0);
pivotField->SetAutoSort(true);
pivotField->SetAscendSort(false);

// Obnovte a vypočítejte data v kontingenční tabulce.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Uložte výstupní excelový soubor
workbook->Save(outputSortedPivotTable);
Obrázek seřazené kontingenční tabulky vygenerovaný ukázkovým kódem

Obrázek seřazené kontingenční tabulky vygenerovaný ukázkovým kódem

Skrýt řádky v kontingenční tabulce pomocí C++

Pomocí Aspose.Cells for C++ API můžete také skrýt řádky v kontingenční tabulce. V následujícím příkladu skryjeme řádek s označením řádku “Oranžová”. Následují kroky ke skrytí řádků v kontingenční tabulce.

Následující ukázkový kód ukazuje, jak skrýt řádky v kontingenční tabulce pomocí C++.

// Cesta ke zdrojovému adresáři.
StringPtr srcDir = new String("SourceDirectory\\");

// Cesta výstupního adresáře.
StringPtr outDir = new String("OutputDirectory\\");

// Cesta ke vstupnímu excelovému souboru
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Cesta k výstupnímu excelovému souboru
StringPtr outputHiddenRowPivotTable = outDir->StringAppend(new String("outputHiddenRowPivotTable.xlsx"));

// Načtěte ukázkový excelový soubor
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Otevřete první pracovní list
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Vstupte do kontingenční tabulky
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Získejte rozsah těla otočného stolu
intrusive_ptr<ICellArea> dataBodyRange = pivotTable->GetIDataBodyRange();

// Počáteční řádek kontingenční tabulky
int currentRow = 5;

// Kontingenční řádek kontingenční tabulky
int rowsUsed = dataBodyRange->GetendRow();

// Iterujte řádky, porovnejte hodnotu buňky a skryjte řádky.
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);
	}
}

// Obnovte a vypočítejte data v kontingenční tabulce.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Uložte výstupní excelový soubor
workbook->Save(outputHiddenRowPivotTable);
Obrázek kontingenční tabulky se skrytým řádkem

Obrázek kontingenční tabulky se skrytým řádkem

Manipulujte s daty kontingenční tabulky pomocí C++

Můžete také manipulovat s daty existující kontingenční tabulky pomocí Aspose.Cells for C++ API. V následujícím příkladu nahradíme text „Apple“ v buňce „A2“ textem „Orange“ a zohledníme změnu v kontingenční tabulce. Následují kroky pro manipulaci s daty kontingenční tabulky.

Následující ukázkový kód ukazuje, jak aktualizovat data kontingenční tabulky pomocí C++.

// Cesta ke zdrojovému adresáři.
StringPtr srcDir = new String("SourceDirectory\\");

// Cesta výstupního adresáře.
StringPtr outDir = new String("OutputDirectory\\");

// Cesta ke vstupnímu excelovému souboru
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Cesta k výstupnímu excelovému souboru
StringPtr outputManipulatePivotTable = outDir->StringAppend(new String("outputManipulatePivotTable.xlsx"));

// Načtěte ukázkový excelový soubor
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Otevřete první pracovní list
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Změňte hodnotu buňky A2, která je uvnitř zdrojových dat kontingenční tabulky
intrusive_ptr<String> str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);

// Otevřete kontingenční tabulku, obnovte ji a vypočítejte ji
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
pivotTable->RefreshData();
pivotTable->CalculateData();

// Uložte výstupní excelový soubor
workbook->Save(outputManipulatePivotTable);
Kontingenční tabulka zobrazující aktualizovaná data

Kontingenční tabulka zobrazující aktualizovaná data

Získejte bezplatnou licenci

Abyste mohli API vyzkoušet bez omezení hodnocení, můžete požádat o bezplatnou dočasnou licenci.

Závěr

V tomto článku jste se naučili pracovat s kontingenčními tabulkami v souborech Excel pomocí C++. Konkrétně jste se naučili, jak vytvořit kontingenční tabulku a třídit, skrývat a aktualizovat data v kontingenční tabulce pomocí C++. Aspose.Cells for C++ je rozsáhlé API, které poskytuje spoustu dalších funkcí pro práci se soubory aplikace Excel. Rozhraní API můžete podrobně prozkoumat na oficiální dokumentaci. V případě jakýchkoli dotazů nás neváhejte kontaktovat na našem bezplatném fóru podpory.

Viz také