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
- Utwórz tabelę przestawną w pliku programu Excel przy użyciu języka C++
- Sortuj tabelę przestawną w pliku Excela przy użyciu C++
- Ukryj wiersze w tabeli przestawnej za pomocą C++
- Manipuluj danymi tabeli przestawnej za pomocą 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.
- Najpierw utwórz instancję klasy IWorkbook, która będzie reprezentować nowy plik programu Excel.
- Uzyskaj dostęp do arkusza, w którym chcesz wstawić tabelę przestawną, używając metody IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Dodaj przykładowe dane do tabeli przestawnej.
- Dodaj tabelę przestawną za pomocą IWorksheet->GetIPivotTables()->Add(intrusiveptrAspose::Cells::Systems::String sourceData, intrusiveptrAspose::Cells::Systems::String docCellName, intrusiveptrAspose::Cells::Systems::String nazwa_tabeli) metoda.
- Aby uzyskać dostęp do tabeli przestawnej, użyj metody IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Manipuluj polami i ustaw styl tabeli przestawnej.
- Na koniec zapisz plik programu Excel za pomocą opcji IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String nazwa_pliku) metoda.
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")));
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.
- Najpierw załaduj przykładowy plik programu Excel przy użyciu klasy IWorkbook.
- Pobierz arkusz zawierający tabelę przestawną za pomocą metody IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Uzyskaj dostęp do tabeli przestawnej za pomocą metody IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Pobierz pole wiersza i posortuj tabelę przestawną za pomocą metod IPivotField->SetAutoSort(bool value) i IPivotField->SetAscendSort(bool value).
- Odśwież zawartość tabeli przestawnej i oblicz dane odpowiednio metodami IPivotTable->RefreshData() i IPivotTable->CalculateData().
- Na koniec zapisz plik programu Excel za pomocą opcji IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String nazwa_pliku) metoda.
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);
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.
- Najpierw załaduj przykładowy plik programu Excel przy użyciu klasy IWorkbook.
- Pobierz arkusz zawierający tabelę przestawną za pomocą metody IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Uzyskaj dostęp do tabeli przestawnej za pomocą metody IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Uzyskaj zakres treści tabeli przestawnej za pomocą metody IPivotTable->GetIDataBodyRange().
- Przejrzyj wiersze tabeli przestawnej i ukryj wiersze spełniające Twoje kryteria.
- Odśwież zawartość tabeli przestawnej i oblicz dane odpowiednio metodami IPivotTable->RefreshData() i IPivotTable->CalculateData().
- Na koniec zapisz plik programu Excel za pomocą opcji IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String nazwa_pliku) metoda.
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);
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.
- Najpierw załaduj przykładowy plik programu Excel przy użyciu klasy IWorkbook.
- Pobierz arkusz zawierający dane tabeli przestawnej za pomocą metody IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Zaktualizuj dane tabeli przestawnej zgodnie z wymaganiami.
- Aby uzyskać dostęp do tabeli przestawnej, użyj metody IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Odśwież zawartość tabeli przestawnej i oblicz dane odpowiednio metodami IPivotTable->RefreshData() i IPivotTable->CalculateData().
- Na koniec zapisz plik programu Excel za pomocą opcji IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String nazwa_pliku) metoda.
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);
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.