피벗 테이블은 의미 있는 방식으로 데이터를 나타내기 위해 데이터를 재정렬합니다. 다양한 정렬 옵션을 제공하고 데이터를 함께 그룹화하여 합계, 평균 또는 기타 통계를 제공합니다. 데이터 분석을 위한 필수 도구이며 MS Excel의 기본 요소입니다. 프로그래밍 방식으로 피벗 테이블을 만들고 조작해야 하는 시나리오에 직면할 수 있습니다. 이를 위해 이 기사에서는 C++를 사용하여 Excel 파일에서 피벗 테이블을 사용하는 방법을 설명합니다.
- Excel 파일에서 피벗 테이블 작업을 위한 C++ API
- C++를 사용하여 Excel 파일에서 피벗 테이블 만들기
- C++를 사용하여 Excel 파일에서 피벗 테이블 정렬
- C++를 사용하여 피벗 테이블에서 행 숨기기
- C++를 사용하여 피벗 테이블 데이터 조작
Excel 파일에서 피벗 테이블 작업을 위한 C++ API
Aspose.Cells for C++는 Microsoft Excel을 설치하지 않고도 Excel 파일을 만들고 읽고 업데이트할 수 있는 네이티브 C++ 라이브러리입니다. API는 Excel 파일의 피벗 테이블 작업도 지원합니다. NuGet을 통해 API를 설치하거나 다운로드 섹션에서 직접 다운로드할 수 있습니다.
PM> Install-Package Aspose.Cells.Cpp
C++를 사용하여 Excel 파일에서 피벗 테이블 만들기
다음 예에서는 새 Excel 파일을 만들고 여기에 샘플 데이터를 삽입하고 피벗 테이블을 만듭니다. 이 예제에서 생성된 파일은 다른 예제의 소스 파일로 사용됩니다. 다음은 Excel 파일에서 피벗 테이블을 만드는 단계입니다.
- 먼저 새 Excel 파일을 나타내는 IWorkbook 클래스의 인스턴스를 만듭니다.
- IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index) 메서드를 사용하여 피벗 테이블을 삽입할 워크시트에 액세스합니다.
- 피벗 테이블에 대한 샘플 데이터를 추가합니다.
- IWorksheet->GetIPivotTables()->Add(intrusiveptr)를 사용하여 피벗 테이블을 추가합니다.Aspose::Cells::Systems::String sourceData, intrusiveptrAspose::Cells::Systems::String destCellName, intrusiveptrAspose::Cells::Systems::String tableName) 메서드입니다.
- 피벗 테이블에 액세스하려면 IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index) 메서드를 사용합니다.
- 필드를 조작하고 피벗 테이블의 스타일을 설정합니다.
- 마지막으로 IWorkbook->Save(intrusiveptrAspose::Cells::Systems::String fileName) 메서드입니다.
다음 샘플 코드는 C++를 사용하여 Excel 파일에서 피벗 테이블을 만드는 방법을 보여줍니다.
// 소스 디렉토리 경로.
StringPtr srcDir = new String("SourceDirectory\\");
// 출력 디렉토리 경로.
StringPtr outDir = new String("OutputDirectory\\");
// IWorkbook 클래스의 인스턴스 만들기
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();
// 첫 번째 워크시트에 액세스
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);
// 피벗 테이블에 대한 소스 데이터 추가
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);
// 피벗 테이블 추가
int idx = worksheet->GetIPivotTables()->Add(new String("A1:C4"), new String("E5"), new String("MyPivotTable"));
// 생성된 피벗 테이블에 액세스
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(idx);
// 피벗 테이블 행, 열 및 데이터 필드 조작
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());
// 피벗 테이블 스타일 설정
pivotTable->SetPivotTableStyleType(PivotTableStyleType_PivotTableStyleMedium9);
// 출력 엑셀 파일 저장
workbook->Save(outDir->StringAppend(new String("outputCreatePivotTable.xlsx")));
C++를 사용하여 Excel 파일에서 피벗 테이블 정렬
다음 예에서는 피벗 테이블의 첫 번째 열을 내림차순으로 정렬합니다. 다음은 피벗 테이블에서 데이터를 정렬하는 단계입니다.
- 먼저 IWorkbook 클래스를 사용하여 샘플 Excel 파일을 로드합니다.
- IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index) 메서드를 사용하여 피벗 테이블이 포함된 워크시트를 검색합니다.
- IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index) 메서드를 사용하여 피벗 테이블에 액세스합니다.
- 행 필드를 가져오고 IPivotField->SetAutoSort(bool value) 및 IPivotField->SetAscendSort(bool value) 메서드를 사용하여 피벗 테이블을 정렬합니다.
- 피벗 테이블의 내용을 새로고침하고 IPivotTable->RefreshData() 및 IPivotTable->CalculateData() 메서드를 각각 사용하여 데이터를 계산합니다.
- 마지막으로 IWorkbook->Save(intrusiveptrAspose::Cells::Systems::String fileName) 메서드입니다.
다음 샘플 코드는 C++를 사용하여 Excel 파일에서 피벗 테이블을 정렬하는 방법을 보여줍니다.
// 소스 디렉토리 경로.
StringPtr srcDir = new String("SourceDirectory\\");
// 출력 디렉토리 경로.
StringPtr outDir = new String("OutputDirectory\\");
// 입력 엑셀 파일의 경로
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));
// 출력 엑셀 파일의 경로
StringPtr outputSortedPivotTable = outDir->StringAppend(new String("outputSortedPivotTable.xlsx"));
// 샘플 엑셀 파일 불러오기
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);
// 첫 번째 워크시트에 액세스
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);
// 피벗 테이블에 액세스
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
// 피벗 테이블 정렬 설정
pivotTable->AddFieldToArea(PivotFieldType_Row, 0);
intrusive_ptr<IPivotField> pivotField = pivotTable->GetIRowFields()->GetObjectByIndex(0);
pivotField->SetAutoSort(true);
pivotField->SetAscendSort(false);
// 피벗 테이블의 데이터를 새로 고치고 계산합니다.
pivotTable->RefreshData();
pivotTable->CalculateData();
// 출력 엑셀 파일 저장
workbook->Save(outputSortedPivotTable);
C++를 사용하여 피벗 테이블에서 행 숨기기
Aspose.Cells for C++ API를 사용하면 피벗 테이블의 행을 숨길 수도 있습니다. 다음 예에서는 “주황색” 행 레이블이 있는 행을 숨깁니다. 다음은 피벗 테이블에서 행을 숨기는 단계입니다.
- 먼저 IWorkbook 클래스를 사용하여 샘플 Excel 파일을 로드합니다.
- IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index) 메서드를 사용하여 피벗 테이블이 포함된 워크시트를 검색합니다.
- IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index) 메서드를 사용하여 피벗 테이블에 액세스합니다.
- IPivotTable->GetIDataBodyRange() 메서드를 사용하여 피벗 테이블 데이터 본문 범위를 가져옵니다.
- 피벗 테이블의 행을 반복하고 기준에 맞는 행을 숨깁니다.
- 피벗 테이블의 내용을 새로고침하고 IPivotTable->RefreshData() 및 IPivotTable->CalculateData() 메서드를 각각 사용하여 데이터를 계산합니다.
- 마지막으로 IWorkbook->Save(intrusiveptrAspose::Cells::Systems::String fileName) 메서드입니다.
다음 샘플 코드는 C++를 사용하여 피벗 테이블에서 행을 숨기는 방법을 보여줍니다.
// 소스 디렉토리 경로.
StringPtr srcDir = new String("SourceDirectory\\");
// 출력 디렉토리 경로.
StringPtr outDir = new String("OutputDirectory\\");
// 입력 엑셀 파일의 경로
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));
// 출력 엑셀 파일의 경로
StringPtr outputHiddenRowPivotTable = outDir->StringAppend(new String("outputHiddenRowPivotTable.xlsx"));
// 샘플 엑셀 파일 불러오기
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);
// 첫 번째 워크시트에 액세스
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);
// 피벗 테이블에 액세스
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
// 피벗 테이블 본문 범위 가져오기
intrusive_ptr<ICellArea> dataBodyRange = pivotTable->GetIDataBodyRange();
// 피벗 테이블 시작 행
int currentRow = 5;
// 피벗 테이블 끝 행
int rowsUsed = dataBodyRange->GetendRow();
// 행을 반복하고 셀 값을 비교하고 행을 숨깁니다.
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);
}
}
// 피벗 테이블의 데이터를 새로 고치고 계산합니다.
pivotTable->RefreshData();
pivotTable->CalculateData();
// 출력 엑셀 파일 저장
workbook->Save(outputHiddenRowPivotTable);
C++를 사용하여 피벗 테이블 데이터 조작
Aspose.Cells for C++ API를 사용하여 기존 피벗 테이블의 데이터를 조작할 수도 있습니다. 다음 예에서는 “A2” 셀의 “Apple” 텍스트를 “Orange"로 바꾸고 피벗 테이블의 변경 사항을 반영합니다. 다음은 피벗 테이블 데이터를 조작하는 단계입니다.
- 먼저 IWorkbook 클래스를 사용하여 샘플 Excel 파일을 로드합니다.
- IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index) 메서드를 사용하여 피벗 테이블 데이터가 포함된 워크시트를 검색합니다.
- 요구 사항에 따라 피벗 테이블의 데이터를 업데이트합니다.
- 피벗 테이블에 접근하기 위해서는 IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index) 메서드를 사용합니다.
- 피벗 테이블의 내용을 새로고침하고 IPivotTable->RefreshData() 및 IPivotTable->CalculateData() 메서드를 각각 사용하여 데이터를 계산합니다.
- 마지막으로 IWorkbook->Save(intrusiveptrAspose::Cells::Systems::String fileName) 메서드입니다.
다음 샘플 코드는 C++를 사용하여 피벗 테이블의 데이터를 업데이트하는 방법을 보여줍니다.
// 소스 디렉토리 경로.
StringPtr srcDir = new String("SourceDirectory\\");
// 출력 디렉토리 경로.
StringPtr outDir = new String("OutputDirectory\\");
// 입력 엑셀 파일의 경로
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));
// 출력 엑셀 파일의 경로
StringPtr outputManipulatePivotTable = outDir->StringAppend(new String("outputManipulatePivotTable.xlsx"));
// 샘플 엑셀 파일 불러오기
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);
// 첫 번째 워크시트에 액세스
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);
// 피벗 테이블의 소스 데이터 내부에 있는 셀 A2의 값 변경
intrusive_ptr<String> str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);
// 피벗 테이블 액세스, 새로 고침 및 계산
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
pivotTable->RefreshData();
pivotTable->CalculateData();
// 출력 엑셀 파일 저장
workbook->Save(outputManipulatePivotTable);
무료 라이선스 받기
평가 제한 없이 API를 사용하려면 무료 임시 라이선스를 요청할 수 있습니다.
결론
이 기사에서는 C++를 사용하여 Excel 파일에서 피벗 테이블로 작업하는 방법을 배웠습니다. 특히 C++를 사용하여 피벗 테이블을 생성하고 피벗 테이블의 데이터를 정렬, 숨기기 및 업데이트하는 방법을 배웠습니다. Aspose.Cells for C++는 Excel 파일 작업을 위한 다양한 추가 기능을 제공하는 방대한 API입니다. API에 대한 자세한 내용은 공식 문서에서 확인할 수 있습니다. 질문이 있는 경우 무료 지원 포럼을 통해 언제든지 문의하십시오.