Excel ファイルを HTML 形式に変換することは、Web 上でのデータ公開や社内ポータルへの埋め込み、クロスプラットフォームなデータ共有を行う際に有用な手法です。HTML 形式は特別なビューアを必要とせず、ブラウザさえあればどの環境でもデータを閲覧できるという利点があります。
本記事では、C++ で用いて Excel ファイルを HTML に変換する方法を紹介します。具体的には、以下の操作を実装します:
- ワークブック全体を HTML に変換
- 特定のワークシートを HTML に変換
- 変換時の詳細設定(画像埋め込み方式、エンコーディングなど)
環境準備
ライブラリの導入
本記事で使用するライブラリは、Excel 文書の読み書きおよび各種形式への変換機能を提供する C++ 向けの製品です。プロジェクトへの組み込み方法は以下の通りです。
Visual Studio を使用する場合
プロジェクトを開き、「ソリューションエクスプローラー」 > 「参照」を右クリック > 「NuGet パッケージの管理」を選択します。「Browse」タブで該当パッケージを検索し、インストールします。
手動で導入する場合
- 製品パッケージをダウンロードし、解凍します
- 解凍したフォルダ内の「include」と「lib」をプロジェクトディレクトリにコピーします
- プロジェクトのプロパティで、追加のインクルードディレクトリとライブラリディレクトリを設定します
- ソースコードに以下のインクルード文を追加します:
#include "Spire.Xls.o.h"
HTML変換の基本
Excel から HTML への変換は、他の形式への変換と比較してシンプルな API で実現できます。基本的な変換コードは以下の通りです。
#include "Spire.Xls.o.h"
using namespace Spire::Xls;
int main()
{
// Workbook インスタンスを作成
intrusive_ptr<Workbook> workbook = new Workbook();
// Excel ファイルを読み込み
workbook->LoadFromFile(L"サンプル.xlsx");
// HTML として保存
workbook->SaveToFile(L"出力.html", FileFormat::HTML);
workbook->Dispose();
return 0;
}
変換パターン別実装例
1. ワークブック全体を HTML に変換
最も基本的な使用方法です。Excel ファイル全体を HTML ファイルとして出力します。
#include "Spire.Xls.o.h"
using namespace Spire::Xls;
int main()
{
// Workbook インスタンスを作成
intrusive_ptr<Workbook> workbook = new Workbook();
// Excel ファイルを読み込み
workbook->LoadFromFile(L"販売データ.xlsx");
// ワークブック全体を HTML として保存
workbook->SaveToFile(L"販売データ.html", FileFormat::HTML);
workbook->Dispose();
return 0;
}
出力される HTML は、元の Excel の書式(フォント、罫線、背景色など)を可能な限り維持した状態で生成されます。
2. 特定のワークシートを HTML に変換
複数のワークシートを含むファイルから、特定のシートだけを HTML に変換する方法です。
#include "Spire.Xls.o.h"
using namespace Spire::Xls;
int main()
{
// Workbook インスタンスを作成
intrusive_ptr<Workbook> workbook = new Workbook();
workbook->LoadFromFile(L"四半期レポート.xlsx");
// 変換対象のワークシートを指定(例:2 番目のシート)
intrusive_ptr<Worksheet> targetSheet = workbook->GetWorksheets()->Get(1);
// 新しい Workbook オブジェクトを作成し、対象シートをコピー
intrusive_ptr<Workbook> newWorkbook = new Workbook();
newWorkbook->GetWorksheets()->AddCopy(targetSheet);
// コピーしたワークブックを HTML として保存
newWorkbook->SaveToFile(L"四半期レポート_特定シート.html", FileFormat::HTML);
workbook->Dispose();
newWorkbook->Dispose();
return 0;
}
この方法では、対象シートを新しいワークブックにコピーした上で HTML 変換を行います。元のワークブックには影響を与えません。
3. 複数ワークシートを個別の HTML ファイルとして出力
各ワークシートをそれぞれ別の HTML ファイルとして出力する方法です。
#include "Spire.Xls.o.h"
using namespace Spire::Xls;
int main()
{
// Workbook インスタンスを作成
intrusive_ptr<Workbook> workbook = new Workbook();
workbook->LoadFromFile(L"部門別予算.xlsx");
// 全シート数を取得
int sheetCount = workbook->GetWorksheets()->GetCount();
// 各シートを個別の HTML として出力
for (int i = 0; i < sheetCount; i++)
{
intrusive_ptr<Worksheet> sheet = workbook->GetWorksheets()->Get(i);
// シート名をファイル名に使用(ファイル名に使用できない文字は置換)
std::wstring sheetName = sheet->GetName();
std::wstring fileName = sheetName + L".html";
// 新しいワークブックを作成してシートをコピー
intrusive_ptr<Workbook> tempWorkbook = new Workbook();
tempWorkbook->GetWorksheets()->AddCopy(sheet);
// HTML として保存
tempWorkbook->SaveToFile(fileName.c_str(), FileFormat::HTML);
tempWorkbook->Dispose();
}
workbook->Dispose();
return 0;
}
HTML 出力の詳細設定
実用的な HTML 変換を行うには、いくつかの詳細設定を理解しておく必要があります。
画像埋め込み方式の指定
HTML 出力時に、ワークシート内の画像や図形をどのように埋め込むかを指定できます。
// オプションオブジェクトを作成
intrusive_ptr<HtmlExportOptions> options = new HtmlExportOptions();
// 画像埋め込み方式を指定
options->SetImageEmbedded(true); // 画像をHTMLファイルに埋め込む(Base64)
// options->SetImageEmbedded(false); // 画像を別ファイルとして出力
// オプションを適用して保存
workbook->SaveToFile(L"出力.html", FileFormat::HTML, options);
画像を埋め込む方式(Base64)では単一ファイルで完結しますが、ファイルサイズが大きくなる傾向があります。別ファイルとして出力する方式では、HTMLファイルと画像フォルダが別途生成されます。
エンコーディングの指定
HTML ファイルの文字エンコーディングを指定することができます。
// オプションオブジェクトを作成
intrusive_ptr<HtmlExportOptions> options = new HtmlExportOptions();
// エンコーディングをUTF-8に設定
options->SetEncoding(L"UTF-8");
// 保存時に適用
workbook->SaveToFile(L"出力_UTF8.html", FileFormat::HTML, options);
日本語を含む Excel ファイルを HTML に変換する場合、エンコーディングの指定は文字化け防止のために重要です。UTF-8 を指定することで、多言語環境での互換性が高まります。
シートごとの HTML 出力制御
複数シートをどのように HTML 出力するかを制御する設定です。
// オプションオブジェクトを作成
intrusive_ptr<HtmlExportOptions> options = new HtmlExportOptions();
// 各シートを個別の HTML ファイルとして出力する設定
options->SetExportSheetAsHtml(true);
workbook->SaveToFile(L"マルチシート出力.html", FileFormat::HTML, options);
CSS スタイルのカスタマイズ
出力される HTML に適用する CSS スタイルを制御することも可能です。
// オプションオブジェクトを作成
intrusive_ptr<HtmlExportOptions> options = new HtmlExportOptions();
// インラインスタイルではなく CSS クラスを使用する設定
options->SetUseInlineStyles(false);
workbook->SaveToFile(L"カスタムスタイル.html", FileFormat::HTML, options);
変換時の留意点
Excel から HTML への変換処理では、以下の点に注意が必要です。
フォントの取り扱い:システムにインストールされていないフォントが Excel 内で使用されている場合、HTML 出力時に代替フォントが適用されます。Web フォントを利用するなど、CSS 側でフォント指定を調整することも検討できます。
グラフと図形:多くのグラフや図形は画像としてエクスポートされます。この場合、元の Excel と完全に同じ見た目にならない可能性があります。特に動的なグラフ要素については、変換後の HTML でインタラクティブ性が失われる点を理解しておく必要があります。
レイアウトの差異:ブラウザのレンダリングエンジンによって、微妙なレイアウトの差異が生じることがあります。クロスブラウザ対応が必要な場合は、出力された HTML を実際の配信環境で確認することを推奨します。
ファイルサイズ:Excel ファイルの内容によっては、生成される HTML ファイルのサイズが大きくなることがあります。特に大量の画像や複雑な書式を含む場合は、必要に応じて出力範囲を限定することを検討してください。
まとめ
本記事では、C++ 向けの Excel 処理ライブラリを利用して、Excel ファイルを HTML 形式に変換する方法を解説しました。ワークブック全体の変換、特定ワークシートの変換、複数シートの個別出力など、用途に応じた複数の変換パターンを示しました。また、画像埋め込み方式、文字エンコーディング、CSS スタイルなど、HTML 出力時の詳細設定についても紹介しました。Excel から HTML への変換は、Web 上でのデータ公開や社内システムとの連携において有用な技術です。プログラムによる自動化によって、定期的なレポートの HTML 出力やデータポータルへの反映などの処理を効率化できます。実際の実装にあたっては、変換対象のデータ量や出力先の Web 環境、必要なレイアウト精度を事前に確認し、適切な設定を選択することが重要です。