セルの結合と結合解除は、MicrosoftExcelのシンプルで一般的に使用される機能です。セルの結合は、たとえば、同じ見出しを共有する複数の列を持つワークシートがある場合などのシナリオで役立つ場合があります。列の上のセルを結合して、共通の見出しを付けることができます。結合されたセルが不要になった場合は、同じように簡単に結合を解除できます。 C++アプリケーション内でこれらのタスクを実行する必要がある場合があります。そのために、この記事では、C++を使用してプログラムでExcelワークシートのセルを結合および結合解除する方法について説明します。

セルをマージおよびアンマージするためのC++API

Aspose.Cells for C++はネイティブC++ライブラリであり、Microsoft Excelをインストールしなくても、Excelファイルを作成、読み取り、変更できます。 APIは、Excelワークシートのセルの結合と結合解除もサポートしています。 APIは、NuGetからインストールするか、ダウンロードセクションから直接ダウンロードできます。

PM> Install-Package Aspose.Cells.Cpp

C++を使用してExcelワークシートのセルを結合する

この例では、空のExcelワークシートを作成し、以下の手順に従っていくつかのセルを結合します。

次のサンプルコードは、C++を使用してExcelワークシートのセルを結合する方法を示しています。

// 出力ディレクトリパス。
StringPtr outDir = new String("OutputDirectory\\");

// 入力Excelファイルをロードします
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Excelファイルの最初のワークシートにアクセスします
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// すべてのセルをフェッチするためにCellsオブジェクトを作成します。
intrusive_ptr<ICells> cells = worksheet->GetICells();

// セルを結合します
cells->Merge(5, 2, 2, 3);

// セルにデータを入れる
cells->GetObjectByIndex(5, 2)->PutValue((StringPtr)new String("This is a test value"));

// Styleオブジェクトを作成する 
intrusive_ptr<IStyle> style = cells->GetICell(5, 2)->GetIStyle();

// Fontオブジェクトを作成する
intrusive_ptr<Aspose::Cells::IFont> font = style->GetIFont();

// 名前を設定する
font->SetName(new String("Times New Roman"));

// フォントサイズを設定する
font->SetSize(18);

// フォントの色を設定する
font->SetColor(Systems::Drawing::Color::GetCyan());

// テキストを太字にする
font->SetBold(true);

// テキストを斜体にする
font->SetItalic(true);

// 前景色を設定する
style->SetForegroundColor(Systems::Drawing::Color::GetRed());

// パターンを設定する
style->SetPattern(BackgroundType_Solid);

// スタイルを適用する
cells->GetICell(5, 2)->SetIStyle(style);

// Excelファイルを保存します
workbook->Save(outDir->StringAppend(new String("MergeCells_out.xlsx")));
サンプルコードによって生成された出力Excelファイルの画像

サンプルコードによって生成された出力Excelファイルの画像

C++を使用してExcelワークシートのセルを結合解除する

以下は、Excelワークシートのセルを結合解除する手順です。

次のサンプルコードは、C++を使用してExcelワークシートのセルを結合解除する方法を示しています。

// ソースディレクトリのパス。
StringPtr srcDir = new String("SourceDirectory\\");

// 出力ディレクトリパス。
StringPtr outDir = new String("OutputDirectory\\");

// 入力Excelファイルをロードします
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(srcDir->StringAppend(new String("SampleMergedCells.xlsx")));

// Excelファイルの最初のワークシートにアクセスします
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// すべてのセルをフェッチするためにCellsオブジェクトを作成します。
intrusive_ptr<ICells> cells = worksheet->GetICells();

// セルのマージを解除します。
cells->UnMerge(5, 2, 2, 3);

// Excelファイルを保存します
workbook->Save(outDir->StringAppend(new String("UnmergeCells_out.xlsx")));
サンプルコードによって生成された出力Excelファイルの画像

サンプルコードによって生成された出力Excelファイルの画像

C++を使用してExcelワークシートのセルの範囲をマージする

以下は、Excelワークシートのセルの範囲をマージする手順です。

次のサンプルコードは、C++を使用してExcelワークシートのセルの範囲をマージする方法を示しています。

// 出力ディレクトリパス。
StringPtr outDir = new String("OutputDirectory\\");

// 入力Excelファイルをロードします
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Excelファイルの最初のワークシートにアクセスします
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// A1セルにデータを入力します。
worksheet->GetICells()->GetObjectByIndex(0, 0)->PutValue((StringPtr)new String("This is a test value"));

// 範囲を作成する
intrusive_ptr<IRange> range = worksheet->GetICells()->CreateIRange(new String("A1:D4"));

// 範囲を単一のセルにマージ
range->Merge();

// Excelファイルを保存します
workbook->Save(outDir->StringAppend(new String("MergeRangeOfCells_out.xlsx")));
サンプルコードによって生成された出力Excelファイルの画像

サンプルコードによって生成された出力Excelファイルの画像

C++を使用してExcelワークシートのセルの範囲をマージ解除します

以下は、Excelワークシートのセルの範囲をマージ解除する手順です。

次のサンプルコードは、C++を使用してExcelワークシートのセルの範囲をマージ解除する方法を示しています。

// ソースディレクトリのパス。
StringPtr srcDir = new String("SourceDirectory\\");

// 出力ディレクトリパス。
StringPtr outDir = new String("OutputDirectory\\");

// 入力Excelファイルをロードします
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(srcDir->StringAppend(new String("SampleMergedRangeOfCells.xlsx")));

// Excelファイルの最初のワークシートにアクセスします
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// 範囲を作成する
intrusive_ptr<IRange> range = worksheet->GetICells()->CreateIRange(new String("A1:D4"));

// 範囲のマージを解除
range->UnMerge();

// Excelファイルを保存します
workbook->Save(outDir->StringAppend(new String("UnmergeRangeOfCells_out.xlsx")));
サンプルコードによって生成された出力Excelファイルの画像

サンプルコードによって生成された出力Excelファイルの画像

C++を使用してExcelワークシートの名前付き範囲のセルを結合する

Aspose.Cells for C++には、名前付き範囲のセルを結合する機能もあります。これを実現するには、以下の手順に従ってください。

次のサンプルコードは、C++を使用して名前付き範囲のセルをマージする方法を示しています。

// ソースディレクトリのパス。
StringPtr srcDir = new String("SourceDirectory\\");

// 出力ディレクトリパス。
StringPtr outDir = new String("OutputDirectory\\");

// 入力Excelファイルをロードします
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(srcDir->StringAppend(new String("SampleMergedRangeOfCells.xlsx")));

// Excelファイルの最初のワークシートにアクセスします
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// 範囲を作成する
intrusive_ptr<IRange> range = worksheet->GetICells()->CreateIRange(new String("A1:D4"));

// 範囲名を設定する
range->SetName(new String("Named_Range"));

// スタイルオブジェクトを定義する
intrusive_ptr<IStyle> style = workbook->CreateIStyle();

// 水平方向の配置を設定します
style->SetHorizontalAlignment(TextAlignmentType::TextAlignmentType_Center);

// StyleFlagオブジェクトを作成します
intrusive_ptr<IStyleFlag> styleFlag = Factory::CreateIStyleFlag();

// 水平方向の配置を設定します to true
styleFlag->SetHorizontalAlignment(true);

// 範囲にスタイルを適用します
range->ApplyIStyle(style, styleFlag);

// 範囲内のデータを配置します
range->GetObjectByIndex(0, 0)->PutValue((StringPtr)new String("This is a test value"));

// マージ範囲
range->Merge();

// Excelファイルを保存します
workbook->Save(outDir->StringAppend(new String("MergeNamedRange_out.xlsx")));
サンプルコードによって生成された出力Excelファイルの画像

サンプルコードによって生成された出力Excelファイルの画像

無料ライセンスを取得する

無料の一時ライセンスをリクエストすることで、評価の制限なしにAPIを試すことができます。

結論

この記事では、C++を使用してExcelワークシートのセルを結合および結合解除する方法を学習しました。さらに、C++ APIのAspose.Cellsを使用して、範囲と名前付き範囲をマージおよびマージ解除する方法を確認しました。 APIは、公式ドキュメントにアクセスして詳細に調べることができるExcelファイルを操作するための多くの追加機能を提供します。ご不明な点がございましたら、無料サポートフォーラムまでお気軽にお問い合わせください。

関連項目