C++でExcelファイルを作成する

以前、Excel自動化機能を実装し、C#を使用してExcel XLS/XLSXファイルを最初から作成する方法に関する投稿を作成しました。今日は、Excelワークブックの作成方法、Excelワークシートへのデータの挿入方法、数式の計算方法、C++を使用したワークシートでのグラフや表の作成方法を紹介します。すべてのスプレッドシート自動化機能は、C++ ExcelAPI- Aspose.Cells for C++によって強化されます。

Aspose.Cells for C++は、MicrosoftExcelを必要とせずにスプレッドシートドキュメントを作成、読み取り、解析、および変換できるネイティブC++ライブラリです。 XLS/XLSXスプレッドシートの生成と操作に利用できるExcel自動化機能の完全なセットを提供します。この記事では、Excel XLS/XLSXファイルを最初から作成する次の機能について説明します。

C++ ExcelSpreadsheetAPI-インストール

Aspose.Cells forC++のライブラリファイルの完全なパッケージはダウンロードセクションからダウンロードできます。このパッケージには、すぐに実行できるサンプルコンソールアプリケーションも含まれています。

C++を使用してExcelファイル(XLS / XLSX)を作成する

まず、簡単なExcelXLSXワークブックを最初から作成しましょう。ワークブックは1つまたは複数のワークシートで構成され、各ワークシートには行と列の形式でデータが含まれています。したがって、Excelスプレッドシートを作成するには、最初にワークブックを作成してから、それにワークシートを追加する必要があります。以下は、C++用のAspose.Cellsを使用してExcelファイルを作成する手順です。

  • IWorkbookクラスのオブジェクトを作成します。
  • ブックの最初のワークシート(デフォルトで作成)をIWorksheetCollectionからIWorksheetオブジェクトに取得します。
  • IWorksheet->GetICells()メソッドを使用して、ワークシートのセルにICellsオブジェクトにアクセスします。
  • ICells->GetObjectByIndex()メソッドを使用して、行と列のインデックスを指定し、ワークシートの目的のセルにICellオブジェクトにアクセスします。
  • ICell->PutValue()メソッドを使用してセルに値を追加します。
  • IWorkbook->Save()メソッドを使用して、ブックを.xlsxファイルとして保存します。

次のコードサンプルは、C++を使用してExcelXLSXファイルを作成する方法を示しています。

/*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ワークブック

以下は、作成したばかりのExcelワークブックのスクリーンショットです。

C++でExcelXLSXを作成する

C++を使用してExcelワークシートにデータを追加する

前の例では、単純なExcelファイルを作成し、行と列のインデックスを使用して特定のセルに値を挿入する方法を見てきました。ただし、ほとんどの場合、Excelワークシートのセルは、A1、A2、B1などの列文字と行番号を使用して識別されます。そこで、セル名を使用してワークシートにデータを挿入する方法の例を見てみましょう。このプロセスは、セルに値を追加する点のみが異なり、Excelワークブックとワークシートを作成する他のすべての手順は同じです。

次のコードサンプルは、Excel XLSXブックを作成し、C++を使用してそれにデータを挿入する方法を示しています。

//出力Excelファイルのパス
StringPtr outputData = resultPath->StringAppend(new String("outputData.xlsx"));

//入力Excelファイルを読み取る
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

//Excelファイルの2番目のワークシートにアクセスする
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

//セルに文字列値を追加する
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue("Hello World");

//セルにdouble値を追加する
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(20.5);

//セルに整数値を追加する
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(15);

//セルにブール値を追加する
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++を使用してExcelXLSXブックに数式を追加および計算する方法を示しています。

//新しいブックを作成する
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()メソッドを使用して、セルの範囲をワークシートのリストコレクションに追加します。
  • リストをIListObjectオブジェクトに取得します。
  • IListObject->SetTableStyleType()メソッドを使用してテーブルにスタイルを適用します。
  • ブックを.xlsxファイルとして保存します。

次のコードサンプルは、C++を使用してExcelXLSXファイルにテーブルを作成する方法を示しています。

// Workbookオブジェクトをインスタンス化します
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);

// Excelファイルを保存する
workbook->Save(resultPath->StringAppend(new String("Excel_Table.xlsx")));

テーブル付きExcelワークブック

C++でExcelでテーブルを作成する

C++を使用してExcelスプレッドシートでグラフを作成する

Excelスプレッドシートのグラフは、さまざまな種類のグラフィックオブジェクトを使用してデータを視覚化するために使用されます。特にデータが巨大な場合、データをすばやく洞察して理解することができます。 Aspose.Cells for C++は、Sunburst、Treemap、Histogram、Pyramid、Bubble、Line、その他などのさまざまなグラフをサポートしています。以下は、C++用のAspose.Cellsを使用してExcelブックでグラフを作成する手順です。

  • 新しいExcelブックを作成します。
  • 目的のワークシートにIWorksheetオブジェクトにアクセスします。
  • チャートのタイプを渡して、IWorksheet->GetICharts()->Add()メソッドを使用して、ワークシートに新しいチャートを追加します。
  • 新しく追加されたチャートにIChartオブジェクトにアクセスします。
  • IChart->GetNISeries()->Add()メソッドを使用して、グラフのデータソースを設定します。
  • ブックを.xlsxファイルとして保存します。

次のコードサンプルは、C++を使用してExcelXLSXファイルでグラフを作成する方法を示しています。

// 出力Excelファイルのパス
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);

// Excelファイルを保存する
workbook->Save(outputChartTypePyramid);

チャート付きExcelワークブック

C++でExcelでチャートを作成する

結論

この記事では、C++を使用してMSExcelスプレッドシートを最初から作成する方法について説明しました。この記事には、Excelワークシートで表、グラフを作成し、数式を計算する方法に関するステップバイステップのガイドラインとコードサンプルも含まれています。 Aspose.Cells for C++のドキュメントから、Excelの自動化に関連するその他の高度な機能について詳しく知ることができます。

関連記事