C++에서 Excel 파일 만들기

이전에 C#을 사용하여 Excel 자동화 기능을 구현하고 Excel XLS/XLSX 파일을 처음부터 만드는 방법에 대해 게시물을 작성했습니다. 오늘은 C++를 사용하여 Excel 통합 문서를 만들고, Excel 워크시트에 데이터를 삽입하고, 수식을 계산하고, 워크시트에서 차트와 표를 만드는 방법을 보여 드리겠습니다. 모든 스프레드시트 자동화 기능은 C++ Excel API - C++용 Aspose.Cells로 구동됩니다.

Aspose.Cells for C++는 Microsoft Excel 없이도 스프레드시트 문서를 생성, 읽기, 구문 분석 및 변환할 수 있는 네이티브 C++ 라이브러리입니다. XLS/XLSX 스프레드시트를 생성하고 조작하는 데 사용할 수 있는 완전한 Excel 자동화 기능 세트를 제공합니다. 이 기사에서는 Excel XLS/XLSX 파일을 처음부터 만드는 다음 기능을 다룹니다.

C++ Excel 스프레드시트 API - 설치

다운로드 섹션에서 C++용 Aspose.Cells 라이브러리 파일의 전체 패키지를 다운로드할 수 있습니다. 패키지에는 즉시 실행할 수 있는 샘플 콘솔 응용 프로그램도 포함되어 있습니다.

C++를 사용하여 Excel 파일(XLS/XLSX) 만들기

먼저 간단한 Excel XLSX 통합 문서를 처음부터 만들 수 있습니다. 통합 문서는 하나 이상의 워크시트로 구성되며 각 워크시트에는 행과 열 형식의 데이터가 포함됩니다. 따라서 Excel 스프레드시트를 생성하려면 먼저 통합 문서를 생성한 다음 워크시트를 추가해야 합니다. 다음은 Aspose.Cells for C++를 사용하여 Excel 파일을 생성하는 단계입니다.

다음 코드 샘플은 C++를 사용하여 Excel XLSX 파일을 만드는 방법을 보여줍니다.

/*create a new workbook*/
intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook();

/*get the first worksheet*/
intrusive_ptr<IWorksheetCollection> wsc = wb->GetIWorksheets();
intrusive_ptr<IWorksheet> ws = wsc->GetObjectByIndex(0);

/*get cell(0,0)*/
intrusive_ptr<ICells> cells = ws->GetICells();
intrusive_ptr<ICell> cell = cells->GetObjectByIndex(0, 0);

/*write "Hello World" to cell(0,0) of the first sheet*/
intrusive_ptr<String> str = new String("Hello World!");
cell->PutValue(str);

/*save this workbook to resultFile folder*/
wb->Save(resultPath->StringAppend(new String("workbook.xlsx")));

엑셀 워크북

다음은 방금 만든 Excel 통합 문서의 스크린샷입니다.

C++에서 Excel XLSX 만들기

C++를 사용하여 Excel 워크시트에 데이터 추가

이전 예제에서는 간단한 Excel 파일을 만들고 행 및 열 인덱스를 사용하여 특정 셀에 값을 삽입하는 방법을 보았습니다. 하지만 엑셀 워크시트의 셀은 A1, A2, B1 등과 같은 열 문자와 행 번호를 사용하여 식별되는 경우가 대부분입니다. 따라서 셀 이름을 사용하여 워크시트에 데이터를 삽입하는 방법의 예를 살펴보겠습니다. 프로세스는 셀에 값을 추가하는 것만 다르며 Excel 통합 문서 및 워크시트를 만드는 다른 모든 단계는 동일합니다.

다음 코드 샘플은 C++를 사용하여 Excel XLSX 통합 문서를 만들고 데이터를 삽입하는 방법을 보여줍니다.

//출력 엑셀 파일의 경로
StringPtr outputData = resultPath->StringAppend(new String("outputData.xlsx"));

//입력 엑셀 파일 읽기
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

//Excel 파일의 두 번째 워크시트에 액세스
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

//셀에 문자열 값 추가
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue("Hello World");

//셀에 이중 값 추가
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(20.5);

//셀에 정수 값 추가
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(15);

//셀에 boolean 값 추가
worksheet->GetICells()->GetObjectByIndex(new String("A4"))->PutValue(true);

//날짜 표시 형식 설정
intrusive_ptr<ICell> cell = worksheet->GetICells()->GetObjectByIndex(new String("A5"));
intrusive_ptr<IStyle> style = cell->GetIStyle();
style->SetNumber(15);
cell->SetIStyle(style);

//통합 문서 저장
workbook->Save(outputData);

C++를 사용하여 통합 문서 수식 계산

Excel 통합 문서에서 수식을 설정하는 것은 데이터에 대한 계산을 수행하는 놀라운 기능입니다. 데이터에 대한 복잡한 계산을 효과적이고 효율적으로 수행하는 것이 훨씬 쉬워집니다. 다음은 Excel 워크시트에서 수식을 설정하고 계산하는 단계입니다.

다음 코드 샘플은 C++를 사용하여 Excel XLSX 통합 문서에서 수식을 추가하고 계산하는 방법을 보여줍니다.

//새 통합 문서 만들기
intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook();

//기본적으로 생성되는 첫 번째 워크시트 가져오기
intrusive_ptr<IWorksheet> ws = wb->GetIWorksheets()->GetObjectByIndex(0);

//"A1" 셀에 값 추가
intrusive_ptr<ICell> cell = ws->GetICells()->GetObjectByIndex(new String("A1"));
cell->PutValue(5);

//"A2" 셀에 값 추가
cell = ws->GetICells()->GetObjectByIndex(new String("A2"));
cell->PutValue(15);

//"A3" 셀에 값 추가
cell = ws->GetICells()->GetObjectByIndex(new String("A3"));
cell->PutValue(25);

//"A4" 셀에 SUM 수식 추가
cell = ws->GetICells()->GetObjectByIndex(new String("A4"));
cell->SetFormula(new String("=SUM(A1:A3)"));

//수식 결과 계산
wb->CalculateFormula();

//"A4" 셀의 계산된 값을 가져와 콘솔에 인쇄합니다.
cell = ws->GetICells()->GetObjectByIndex(new String("A4"));
StringPtr sCalcuInfo = new String(L"Calculated Value of Cell A4: ");
Console::WriteLine(sCalcuInfo->StringAppend(cell->GetStringValue()));

C++를 사용하여 Excel 워크시트에서 테이블 만들기

Excel 워크시트의 테이블은 셀 범위에 있는 데이터 그룹을 구성하는 데 사용됩니다. 또한 표는 워크시트에서 다양한 유형의 목록을 유지 관리하는 데 도움이 됩니다. 다음은 Excel 워크시트에서 테이블을 만드는 단계입니다.

  • IWorkbook 클래스를 사용하여 새 Excel 통합 문서를 만듭니다.
  • IWorksheet 개체에 기본 워크시트에 액세스하거나 새 개체를 추가합니다.
  • 이전 예에서 했던 것과 같은 방식으로 값/데이터를 셀에 삽입합니다.
  • IWorksheet->GetIListObjects()->Add() 메서드를 사용하여 워크시트의 Lists 컬렉션에 셀 범위를 추가합니다.
  • 목록을 IListObject 개체로 가져옵니다.
  • IListObject->SetTableStyleType() 메서드를 사용하여 테이블에 스타일을 적용합니다.
  • 통합 문서를 .xlsx 파일로 저장합니다.

다음 코드 샘플은 C++를 사용하여 Excel XLSX 파일에 테이블을 만드는 방법을 보여줍니다.

// 통합 문서 개체 인스턴스화
intrusive_ptr<IWorkbook>  workbook = Factory::CreateIWorkbook();

// 기본(첫 번째) 워크시트의 참조 가져오기
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// 워크시트의 셀 컬렉션 가져오기
intrusive_ptr<ICells> cells = worksheet->GetICells();

// 값을 셀에 설정
cells->GetObjectByIndex(new String("A1"))->PutValue("Employee");
cells->GetObjectByIndex(new String("B1"))->PutValue("Quarter");
cells->GetObjectByIndex(new String("C1"))->PutValue("Product");
cells->GetObjectByIndex(new String("D1"))->PutValue("Continent");
cells->GetObjectByIndex(new String("E1"))->PutValue("Country");
cells->GetObjectByIndex(new String("F1"))->PutValue("Sale");

cells->GetObjectByIndex(new String("A2"))->PutValue("David");
cells->GetObjectByIndex(new String("A3"))->PutValue("David");
cells->GetObjectByIndex(new String("A4"))->PutValue("David");
cells->GetObjectByIndex(new String("A5"))->PutValue("David");
cells->GetObjectByIndex(new String("A6"))->PutValue("James"); 

cells->GetObjectByIndex(new String("B2"))->PutValue(1);
cells->GetObjectByIndex(new String("B3"))->PutValue(2);
cells->GetObjectByIndex(new String("B4"))->PutValue(3);
cells->GetObjectByIndex(new String("B5"))->PutValue(4);
cells->GetObjectByIndex(new String("B6"))->PutValue(1); 

cells->GetObjectByIndex(new String("C2"))->PutValue("Maxilaku");
cells->GetObjectByIndex(new String("C3"))->PutValue("Maxilaku");
cells->GetObjectByIndex(new String("C4"))->PutValue("Chai");
cells->GetObjectByIndex(new String("C5"))->PutValue("Maxilaku");
cells->GetObjectByIndex(new String("C6"))->PutValue("Chang"); 

cells->GetObjectByIndex(new String("D2"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D3"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D4"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D5"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D6"))->PutValue("Europe"); 

cells->GetObjectByIndex(new String("E2"))->PutValue("China");
cells->GetObjectByIndex(new String("E3"))->PutValue("India");
cells->GetObjectByIndex(new String("E4"))->PutValue("Korea");
cells->GetObjectByIndex(new String("E5"))->PutValue("India");
cells->GetObjectByIndex(new String("E6"))->PutValue("France"); 

cells->GetObjectByIndex(new String("F2"))->PutValue(2000);
cells->GetObjectByIndex(new String("F3"))->PutValue(500);
cells->GetObjectByIndex(new String("F4"))->PutValue(1200);
cells->GetObjectByIndex(new String("F5"))->PutValue(1500);
cells->GetObjectByIndex(new String("F6"))->PutValue(500);  


// 워크시트에 새 목록 개체 추가
worksheet->GetIListObjects()->Add(new String("A1"), new String("F6"), true);
intrusive_ptr<IListObject> listObject = worksheet->GetIListObjects()->GetObjectByIndex(0);

// 테이블에 기본 스타일 추가
listObject->SetTableStyleType(TableStyleType_TableStyleMedium10);

// 합계 표시
listObject->SetShowTotals(true);

// 엑셀 파일 저장
workbook->Save(resultPath->StringAppend(new String("Excel_Table.xlsx")));

표가 있는 Excel 통합 문서

C++의 Excel에서 테이블 만들기

C++를 사용하여 Excel 스프레드시트에서 차트 만들기

Excel 스프레드시트의 차트는 다양한 유형의 그래픽 개체를 사용하여 데이터를 시각화하는 데 사용됩니다. 특히 데이터가 방대할 때 데이터에 대한 빠른 통찰력과 이해를 제공합니다. C++용 Aspose.Cells는 Sunburst, Treemap, Histogram, Pyramid, Bubble, Line 및 더 많은을 포함한 다양한 차트를 지원합니다. 다음은 Aspose.Cells for C++를 사용하여 Excel 통합 문서에서 차트를 만드는 단계입니다.

  • 새 Excel 통합 문서를 만듭니다.
  • IWorksheet 개체에 원하는 워크시트에 액세스합니다.
  • 차트 유형을 전달하여 IWorksheet->GetICharts()->Add() 메서드를 사용하여 워크시트에 새 차트를 추가합니다.
  • IChart 객체에 새로 추가된 차트에 접근합니다.
  • IChart->GetNISeries()->Add() 메서드를 사용하여 차트의 데이터 소스를 설정합니다.
  • 통합 문서를 .xlsx 파일로 저장합니다.

다음 코드 샘플은 C++를 사용하여 Excel XLSX 파일에서 차트를 만드는 방법을 보여줍니다.

// 출력 엑셀 파일의 경로
StringPtr outputChartTypePyramid = resultPath->StringAppend(new String("Exce_Pyramid_Chart.xlsx"));

// 새 통합 문서 만들기
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// 기본적으로 생성되는 첫 번째 워크시트 가져오기
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// 셀에 샘플 값 추가
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue(50);
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(100);
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(150);
worksheet->GetICells()->GetObjectByIndex(new String("B1"))->PutValue(4);
worksheet->GetICells()->GetObjectByIndex(new String("B2"))->PutValue(20);
worksheet->GetICells()->GetObjectByIndex(new String("B3"))->PutValue(50);

// 워크시트에 차트 추가
int chartIndex = worksheet->GetICharts()->Add(Aspose::Cells::Charts::ChartType::ChartType_Pyramid, 5, 0, 20, 8);

// 새로 추가된 차트의 인스턴스에 접근
intrusive_ptr<Aspose::Cells::Charts::IChart> chart = worksheet->GetICharts()->GetObjectByIndex(chartIndex);

// "A1" 셀에서 "B3" 범위의 차트에 SeriesCollection(차트 데이터 소스) 추가
chart->GetNISeries()->Add(new String("A1:B3"), true);

// 엑셀 파일 저장
workbook->Save(outputChartTypePyramid);

차트가 있는 Excel 통합 문서

C++의 Excel에서 차트 만들기

결론

이 기사에서는 C++를 사용하여 처음부터 MS Excel 스프레드시트를 만드는 방법을 다루었습니다. 이 문서에는 Excel 워크시트에서 표, 차트를 만들고 수식을 계산하는 방법에 대한 단계별 지침과 코드 샘플도 포함되어 있습니다. C++용 Aspose.Cells의 문서에서 Excel 자동화와 관련된 기타 고급 기능에 대해 자세히 알아볼 수 있습니다.

관련 기사