0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C++ から Excel のセルにフォントを適用する方法

0
Posted at

Excel ファイルをプログラムで生成する際、セルのフォント設定はデータの視認性や可読性を高めるために重要な要素です。フォント名、サイズ、色、太字、斜体、下線など、さまざまな書式属性をセルやセル範囲に対して設定できます。本記事では、C++ から Excel のセルにフォントを適用する方法を、サードパーティ製ライブラリを用いて紹介します。

前提条件

この記事の内容を試すには、以下の環境が必要です。

  • Visual Studio 2017 以降(C++17 対応コンパイラ)
  • 今回使用するライブラリ:Spire.XLS for C++(NuGet または提供元の Web サイトから入手)
  • ネイティブC++向けのAPIを使用します。C++/CLI 向けではない点に注意してください。

プロジェクトにライブラリを導入する際は、インクルードディレクトリの設定と、リンクする .lib ファイルの追加を適切に行います。また、実行時には必要な DLL ファイルを実行ファイルと同じディレクトリに配置してください。

フォント設定の基本構造

セルのフォントは、CellStyle オブジェクトから取得する Font オブジェクトを通じて設定します。Font オブジェクトには以下のような主要なプロパティが用意されています。

プロパティ 説明
SetFontName フォント名の設定(例:"游ゴシック""Arial"
SetSize フォントサイズの設定(ポイント単位)
SetIsBold 太字の設定(true / false
SetIsItalic 斜体の設定(true / false
SetIsSuperscript 上付き文字の設定
SetIsSubscript 下付き文字の設定
SetUnderline 下線のスタイル設定
SetColor / SetKnownColor フォントの色設定
SetIsStrikethrough 取り消し線の設定

1. フォント名とサイズを設定する

特定のセルまたはセル範囲に対してフォント名とサイズを設定するには、CellRange から GetStyle()->GetFont()Font オブジェクトを取得し、各プロパティを設定します。

#include "Spire.Xls.h"

using namespace Spire::Xls;

int main()
{
    Workbook workbook;
    Worksheet* sheet = workbook.GetWorksheets()->Get(0);

    // セルにテキストを設定
    sheet->GetRange(L"A1")->SetValue(L"売上報告書");

    // フォント名とサイズを設定
    CellRange* titleRange = sheet->GetRange(L"A1");
    titleRange->GetStyle()->GetFont()->SetFontName(L"游ゴシック");
    titleRange->GetStyle()->GetFont()->SetSize(20);

    // 複数セルに一括で適用
    sheet->GetRange(L"A2:C2")->SetValue(L"見出し");
    CellRange* headerRange = sheet->GetRange(L"A2:C2");
    headerRange->GetStyle()->GetFont()->SetFontName(L"游ゴシック");
    headerRange->GetStyle()->GetFont()->SetSize(12);

    workbook.SaveToFile(L"output_font_name_size.xlsx", ExcelVersion::Version2016);
    workbook.Dispose();

    return 0;
}

2. 太字、斜体、下線を設定する

フォントスタイルを強調するために、太字、斜体、下線を設定できます。

#include "Spire.Xls.h"

using namespace Spire::Xls;

int main()
{
    Workbook workbook;
    Worksheet* sheet = workbook.GetWorksheets()->Get(0);

    // 太字を設定
    sheet->GetRange(L"A1")->SetValue(L"太字テキスト");
    sheet->GetRange(L"A1")->GetStyle()->GetFont()->SetIsBold(true);

    // 斜体を設定
    sheet->GetRange(L"A2")->SetValue(L"斜体テキスト");
    sheet->GetRange(L"A2")->GetStyle()->GetFont()->SetIsItalic(true);

    // 太字かつ斜体
    sheet->GetRange(L"A3")->SetValue(L"太字斜体テキスト");
    sheet->GetRange(L"A3")->GetStyle()->GetFont()->SetIsBold(true);
    sheet->GetRange(L"A3")->GetStyle()->GetFont()->SetIsItalic(true);

    // 下線を設定
    sheet->GetRange(L"A4")->SetValue(L"下線付きテキスト");
    sheet->GetRange(L"A4")->GetStyle()->GetFont()->SetUnderline(UnderlineType::Single);

    workbook.SaveToFile(L"output_font_style.xlsx", ExcelVersion::Version2016);
    workbook.Dispose();

    return 0;
}

主な下線の種類

UnderlineType 列挙体には以下の値が用意されています。

列挙値 説明
None 下線なし
Single 一重下線
Double 二重下線
SingleAccounting 会計用一重下線
DoubleAccounting 会計用二重下線

3. フォントの色を設定する

フォントの色は、定義済みの色定数を使用する方法と、RGB 値で任意の色を指定する方法があります。

#include "Spire.Xls.h"

using namespace Spire::Xls;

int main()
{
    Workbook workbook;
    Worksheet* sheet = workbook.GetWorksheets()->Get(0);

    // 定義済みの色定数を使用
    sheet->GetRange(L"A1")->SetValue(L"赤色テキスト");
    sheet->GetRange(L"A1")->GetStyle()->GetFont()->SetKnownColor(ExcelColors::Red);

    // 定義済みの色定数を使用
    sheet->GetRange(L"A2")->SetValue(L"青色テキスト");
    sheet->GetRange(L"A2")->GetStyle()->GetFont()->SetKnownColor(ExcelColors::Blue);

    // 任意のRGB値で指定(例:濃い緑色)
    sheet->GetRange(L"A3")->SetValue(L"緑色テキスト");
    sheet->GetRange(L"A3")->GetStyle()->GetFont()->SetColor(Color::FromArgb(0, 128, 0));

    workbook.SaveToFile(L"output_font_color.xlsx", ExcelVersion::Version2016);
    workbook.Dispose();

    return 0;
}

4. 取り消し線、上付き文字、下付き文字を設定する

#include "Spire.Xls.h"

using namespace Spire::Xls;

int main()
{
    Workbook workbook;
    Worksheet* sheet = workbook.GetWorksheets()->Get(0);

    // 取り消し線
    sheet->GetRange(L"A1")->SetValue(L"取り消し線テキスト");
    sheet->GetRange(L"A1")->GetStyle()->GetFont()->SetIsStrikethrough(true);

    // 上付き文字(例:m²の「²」部分)
    sheet->GetRange(L"A2")->SetValue(L"m2");
    CellRange* supRange = sheet->GetRange(L"A2");
    RichText* richText = supRange->GetRichText();
    richText->SetFont(0, 0, supRange->GetStyle()->GetFont());
    richText->SetFont(1, 1, supRange->GetStyle()->GetFont());
    richText->GetFont(1, 1)->SetIsSuperscript(true);

    // 下付き文字(例:H₂Oの「₂」部分)
    sheet->GetRange(L"A3")->SetValue(L"H2O");
    CellRange* subRange = sheet->GetRange(L"A3");
    RichText* richText2 = subRange->GetRichText();
    richText2->SetFont(0, 0, subRange->GetStyle()->GetFont());
    richText2->SetFont(1, 1, subRange->GetStyle()->GetFont());
    richText2->GetFont(1, 1)->SetIsSubscript(true);

    workbook.SaveToFile(L"output_font_special.xlsx", ExcelVersion::Version2016);
    workbook.Dispose();

    return 0;
}

5. セル内の一部の文字に異なるフォントを適用する

セル全体ではなく、セル内の特定の文字だけにフォントを適用したい場合は、RichText クラスを使用します。文字位置を指定して個別にフォントを設定できます。

#include "Spire.Xls.h"

using namespace Spire::Xls;

int main()
{
    Workbook workbook;
    Worksheet* sheet = workbook.GetWorksheets()->Get(0);

    // セルにテキストを設定
    CellRange* range = sheet->GetRange(L"A1");
    range->SetValue(L"赤い太字と青い斜体のテキスト");

    // RichTextを使用して部分的にフォントを設定
    RichText* richText = range->GetRichText();

    // 全体にデフォルトフォントを設定
    IFont* defaultFont = range->GetStyle()->GetFont();
    defaultFont->SetFontName(L"游ゴシック");
    defaultFont->SetSize(12);

    // 0~4文字目(赤い太字)にフォントを設定
    IFont* font1 = richText->SetFont(0, 4, defaultFont);
    font1->SetIsBold(true);
    font1->SetKnownColor(ExcelColors::Red);

    // 5~7文字目(青い斜体)にフォントを設定
    IFont* font2 = richText->SetFont(5, 7, defaultFont);
    font2->SetIsItalic(true);
    font2->SetKnownColor(ExcelColors::Blue);

    workbook.SaveToFile(L"output_rich_text.xlsx", ExcelVersion::Version2016);
    workbook.Dispose();

    return 0;
}

6. 既存のフォント設定をクリアする

セルに設定されているフォントを既定の状態に戻すには、新しいスタイルを作成して割り当てます。

// セルのスタイルを新規作成して割り当てることで初期化
CellStyle* newStyle = workbook.GetStyles()->Add(L"DefaultStyle");
range->SetCellStyle(newStyle);

注意点

  • フォント設定は CellStyle オブジェクトを経由して行います。同じスタイルオブジェクトを複数のセルで共有している場合、一つのセルでフォントを変更すると他のセルにも反映される可能性があります。個別に設定したい場合は、セルごとに異なるスタイルを使用するか、スタイルを複製してください。
  • RichText を使用する際、文字位置のインデックスは0から始まります。範囲指定が実際の文字数を超えないように注意してください。
  • フォント名に指定する文字列は、実際に環境にインストールされているフォント名と一致している必要があります。存在しないフォント名を指定した場合、Excelの既定フォントで表示されます。
  • ライブラリのバージョンによって、メソッド名や引数の仕様が異なる場合があります。使用するバージョンの API リファレンスを適宜確認してください。

まとめ

C++ から Excel のセルにフォントを適用するには、CellRange から GetStyle()->GetFont()Font オブジェクトを取得し、各種プロパティを設定します。フォント名、サイズ、色、太字、斜体、下線、取り消し線などの基本的な書式に加えて、上付き文字や下付き文字の設定も可能です。また、RichText クラスを使用することで、ひとつのセル内で部分的に異なるフォントを適用することもできます。これらのフォント設定をデータの書き込みやセル書式と組み合わせることで、視認性が高く意図の伝わりやすい Excel ファイルをプログラムから生成できます。実際の開発に利用する際は、ライブラリのライセンス形態や配布条件についても事前に確認しておくことをお勧めします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?