Tabele przestawne zmieniają kolejność danych, aby przedstawić je w zrozumiały sposób. Zapewniają różne opcje sortowania i zapewniają sumy, średnie lub inne statystyki poprzez grupowanie danych. Jest niezbędnym narzędziem do analizy danych i jest podstawową częścią MS Excel. Możesz znaleźć się w sytuacji, w której musisz programowo tworzyć tabele przestawne i nimi manipulować. W tym celu w tym artykule dowiesz się, jak pracować z tabelami przestawnymi w plikach Excela przy użyciu języka C++.

C++ API do pracy z tabelami przestawnymi w plikach Excela

Aspose.Cells for C++ to natywna biblioteka C++, która umożliwia tworzenie, odczytywanie i aktualizowanie plików programu Excel bez konieczności instalowania programu Microsoft Excel. API obsługuje również pracę z tabelami przestawnymi w plikach Excel. Możesz zainstalować API poprzez NuGet lub pobrać bezpośrednio z sekcji Downloads.

PM> Install-Package Aspose.Cells.Cpp

Utwórz tabelę przestawną w pliku programu Excel przy użyciu języka C++

W poniższym przykładzie utworzymy nowy plik Excela, wstawimy do niego przykładowe dane i utworzymy tabelę przestawną. Plik wygenerowany w tym przykładzie będzie używany jako plik źródłowy dla innych przykładów. Poniżej przedstawiono kroki tworzenia tabeli przestawnej w pliku programu Excel.

Poniższy przykładowy kod pokazuje, jak utworzyć tabelę przestawną w pliku programu Excel przy użyciu języka C++.

// Ścieżka katalogu źródłowego.
StringPtr srcDir = new String("SourceDirectory\\");

// Ścieżka katalogu wyjściowego.
StringPtr outDir = new String("OutputDirectory\\");

// Utwórz instancję klasy IWorkbook
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Uzyskaj dostęp do pierwszego arkusza
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Dodaj dane źródłowe do tabeli przestawnej
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);

// Dodaj tabelę przestawną
int idx = worksheet->GetIPivotTables()->Add(new String("A1:C4"), new String("E5"), new String("MyPivotTable"));

// Uzyskaj dostęp do utworzonej tabeli przestawnej
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(idx);

// Manipulowanie wierszami, kolumnami i polami danych w tabeli przestawnej
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());

// Ustaw styl tabeli przestawnej
pivotTable->SetPivotTableStyleType(PivotTableStyleType_PivotTableStyleMedium9);

// Zapisz wyjściowy plik programu Excel
workbook->Save(outDir->StringAppend(new String("outputCreatePivotTable.xlsx")));
Obraz tabeli przestawnej utworzonej przez przykładowy kod

Obraz tabeli przestawnej utworzonej przez przykładowy kod

Sortuj tabelę przestawną w pliku Excela przy użyciu C++

W poniższym przykładzie posortujemy pierwszą kolumnę tabeli przestawnej w kolejności malejącej. Poniżej przedstawiono kroki sortowania danych w tabeli przestawnej.

Poniższy przykładowy kod ilustruje sposób sortowania tabeli przestawnej w pliku programu Excel przy użyciu języka C++.

// Ścieżka katalogu źródłowego.
StringPtr srcDir = new String("SourceDirectory\\");

// Ścieżka katalogu wyjściowego.
StringPtr outDir = new String("OutputDirectory\\");

// Ścieżka wejściowego pliku programu Excel
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Ścieżka wyjściowego pliku programu Excel
StringPtr outputSortedPivotTable = outDir->StringAppend(new String("outputSortedPivotTable.xlsx"));

// Załaduj przykładowy plik programu Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Uzyskaj dostęp do pierwszego arkusza
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Uzyskaj dostęp do tabeli przestawnej
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Ustaw sortowanie tabeli przestawnej
pivotTable->AddFieldToArea(PivotFieldType_Row, 0);
intrusive_ptr<IPivotField> pivotField = pivotTable->GetIRowFields()->GetObjectByIndex(0);
pivotField->SetAutoSort(true);
pivotField->SetAscendSort(false);

// Odśwież i oblicz dane w tabeli przestawnej.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Zapisz wyjściowy plik programu Excel
workbook->Save(outputSortedPivotTable);
Obraz posortowanej tabeli przestawnej wygenerowanej przez przykładowy kod

Obraz posortowanej tabeli przestawnej wygenerowanej przez przykładowy kod

Ukryj wiersze w tabeli przestawnej za pomocą C++

Dzięki Aspose.Cells for C++ API możesz także ukryć wiersze w tabeli przestawnej. W poniższym przykładzie ukryjemy wiersz z etykietą „Pomarańczowy”. Poniżej opisano kroki ukrywania wierszy w tabeli przestawnej.

Poniższy przykładowy kod pokazuje, jak ukryć wiersze w tabeli przestawnej za pomocą języka C++.

// Ścieżka katalogu źródłowego.
StringPtr srcDir = new String("SourceDirectory\\");

// Ścieżka katalogu wyjściowego.
StringPtr outDir = new String("OutputDirectory\\");

// Ścieżka wejściowego pliku programu Excel
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Ścieżka wyjściowego pliku programu Excel
StringPtr outputHiddenRowPivotTable = outDir->StringAppend(new String("outputHiddenRowPivotTable.xlsx"));

// Załaduj przykładowy plik programu Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Uzyskaj dostęp do pierwszego arkusza
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Uzyskaj dostęp do tabeli przestawnej
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Uzyskaj zakres treści tabeli przestawnej
intrusive_ptr<ICellArea> dataBodyRange = pivotTable->GetIDataBodyRange();

// Początkowy wiersz tabeli przestawnej
int currentRow = 5;

// Końcowy wiersz tabeli przestawnej
int rowsUsed = dataBodyRange->GetendRow();

// Przejrzyj wiersze, porównaj wartość komórki i ukryj wiersze.
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);
	}
}

// Odśwież i oblicz dane w tabeli przestawnej.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Zapisz wyjściowy plik programu Excel
workbook->Save(outputHiddenRowPivotTable);
Obraz tabeli przestawnej z ukrytym wierszem

Obraz tabeli przestawnej z ukrytym wierszem

Manipulowanie danymi tabeli przestawnej za pomocą C++

Możesz także manipulować danymi istniejącej tabeli przestawnej za pomocą Aspose.Cells for C++ API. W poniższym przykładzie zamienimy tekst „Apple” w komórce „A2” na „Orange” i odzwierciedlimy zmianę w tabeli przestawnej. Poniżej przedstawiono kroki manipulowania danymi tabeli przestawnej.

Poniższy przykładowy kod pokazuje, jak zaktualizować dane tabeli przestawnej przy użyciu języka C++.

// Ścieżka katalogu źródłowego.
StringPtr srcDir = new String("SourceDirectory\\");

// Ścieżka katalogu wyjściowego.
StringPtr outDir = new String("OutputDirectory\\");

// Ścieżka wejściowego pliku programu Excel
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Ścieżka wyjściowego pliku programu Excel
StringPtr outputManipulatePivotTable = outDir->StringAppend(new String("outputManipulatePivotTable.xlsx"));

// Załaduj przykładowy plik programu Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Uzyskaj dostęp do pierwszego arkusza
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Zmień wartość komórki A2, która znajduje się w danych źródłowych tabeli przestawnej
intrusive_ptr<String> str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);

// Uzyskaj dostęp do tabeli przestawnej, odśwież ją i oblicz
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
pivotTable->RefreshData();
pivotTable->CalculateData();

// Zapisz wyjściowy plik programu Excel
workbook->Save(outputManipulatePivotTable);
Tabela przestawna przedstawiająca zaktualizowane dane

Tabela przestawna przedstawiająca zaktualizowane dane

Uzyskaj bezpłatną licencję

Aby wypróbować interfejs API bez ograniczeń ewaluacyjnych, możesz poprosić o bezpłatną licencję tymczasową.

Wniosek

W tym artykule nauczyłeś się pracować z tabelami przestawnymi w plikach Excela przy użyciu języka C++. W szczególności nauczyłeś się, jak tworzyć tabele przestawne oraz sortować, ukrywać i aktualizować dane w tabeli przestawnej za pomocą języka C++. Aspose.Cells for C++ to rozbudowany interfejs API, który zapewnia szereg dodatkowych funkcji do pracy z plikami Excel. Możesz szczegółowo zapoznać się z interfejsem API, odwiedzając oficjalną dokumentację. W przypadku jakichkolwiek pytań prosimy o kontakt na naszym bezpłatnym forum pomocy technicznej.

Zobacz też