企業データ管理と情報共有のシーンにおいて、Excelファイルは機能が強力である一方、クロスプラットフォームでの閲覧、オンライン表示、迅速な共有においては限界があります。多くのユーザーは、Excel表をウェブページに公開してチームメンバーがオンラインで確認できるようにしたり、社内システムに埋め込んでデータを表示したりする必要があります。しかし、手動でExcelをHTMLに変換するのは煩雑な作業であり、元の書式、スタイル、画像を維持することも困難です。特に大量のレポートを処理したり、自動的にウェブレポートを生成したりする場合、プログラミングによる方法が最も効率的な解決策となります。
本記事では、Pythonを使用してExcelワークシートまたはワークブック全体をHTML形式に変換し、元のデータの構造、スタイル、グラフを保持する方法を紹介します。このプロセスは完全に自動化でき、財務レポートのオンライン公開、業務データダッシュボード、プロジェクト進捗追跡ページなどのシナリオに適しています。
本記事で紹介する方法には Free Spire.XLS for Python が必要です。pipでインストールできます:
pip install spire.xls.free
1. 環境準備と基本変換
まず、サンプルデータを含むExcelファイルを作成し、それをHTMLに変換します。営業チームの四半期業績レポートをシミュレートします:
from spire.xls import Workbook, ExcelVersion
outputFile = "SalesReport.xlsx"
# 新しいワークブックを作成
workbook = Workbook()
sheet = workbook.Worksheets[0]
sheet.Name = "第1四半期営業成績"
# ヘッダーを書き込み
headers = ["営業担当者", "第1四半期", "第2四半期", "第3四半期", "第4四半期", "年間合計"]
for col, header in enumerate(headers, start=1):
sheet.Range[1, col].Text = header
sheet.Range[1, col].Style.Font.IsBold = True
# サンプルデータを書き込み
sales_data = [
["田中太郎", 12500000, 13800000, 14200000, 15600000, 56100000],
["佐藤花子", 9800000, 11200000, 12500000, 13400000, 46900000],
["鈴木一郎", 14500000, 15200000, 16800000, 17500000, 64000000],
["高橋美咲", 8700000, 9500000, 10200000, 11800000, 40200000],
]
for row, data in enumerate(sales_data, start=2):
for col, value in enumerate(data, start=1):
if isinstance(value, str):
sheet.Range[row, col].Value = value
else:
sheet.Range[row, col].NumberValue = value
sheet.Range[row, col].Style.NumberFormat = "#,##0"
# 列幅を自動調整
sheet.Range.AutoFitColumns()
# Excelファイルを保存
workbook.SaveToFile(outputFile, ExcelVersion.Version2013)
workbook.Dispose()
print("Excelファイルを作成しました:SalesReport.xlsx")
説明:
-
Workbook()は新しいExcelワークブックオブジェクトを作成 -
Worksheets[0]は最初のワークシートを取得(デフォルトでワークブックには3つのワークシートが含まれる) -
Range[row, col]は行と列のインデックスでセルにアクセス -
NumberFormatは数値書式を設定し、金額を読みやすく表示 -
AutoFitColumns()はコンテンツに合わせて列幅を自動調整
このステップでは、営業データを含むExcelファイルを作成し、後続のHTML変換のソースファイルとして提供します。
2. 単一ワークシートをHTMLに変換
次に、先ほど作成したExcelファイルを読み込み、最初のワークシートをHTML形式に変換します:
from spire.xls import Workbook, HTMLOptions
inputFile = "SalesReport.xlsx"
outputFile = "SalesReport_Sheet.html"
# Excelファイルを読み込み
workbook = Workbook()
workbook.LoadFromFile(inputFile)
# 最初のワークシートを取得
sheet = workbook.Worksheets[0]
# HTMLオプションを作成し、画像埋め込みを設定
options = HTMLOptions()
options.ImageEmbedded = True
# ワークシートをHTMLに変換
sheet.SaveToHtml(outputFile)
workbook.Dispose()
print("ワークシートをHTMLに変換しました:SalesReport_Sheet.html")
説明:
-
LoadFromFile()はディスクから既存のExcelファイルを読み込む -
HTMLOptions()はHTML変換オプションオブジェクトを作成 -
ImageEmbedded = Trueは画像をBase64エンコーディングでHTMLに埋め込み、外部依存を回避 -
SaveToHtml()はワークシートの内容をHTMLファイルとしてエクスポート
ワークシートプレビュー:
注意事項:
- ワークシートに画像、グラフなどのグラフィック要素が含まれる場合、
ImageEmbeddedオプションの有効化を推奨 - 変換後のHTMLファイルはブラウザで直接開いて確認可能
- この方法は指定された現在のワークシートのみを変換し、他のワークシートの内容は含まない
3. ワークブック全体をHTMLに変換
Excelファイルに複数のワークシートが含まれる場合、ワークブックレベルの変換メソッドを使用して、すべてのワークシートを一度にHTMLに変換できます:
from spire.xls import Workbook
inputFile = "MultiSheetReport.xlsx"
outputFile = "MultiSheetReport.html"
# 複数のワークシートを含むExcelファイルを作成
workbook = Workbook()
# 最初のワークシート - 営業データ
sheet1 = workbook.Worksheets[0]
sheet1.Name = "営業データ"
sheet1.Range["A1"].Text = "製品名"
sheet1.Range["B1"].Text = "販売数量"
sheet1.Range["C1"].Text = "売上高"
sheet1.Range["A2"].Text = "ノートパソコン"
sheet1.Range["B2"].NumberValue = 1250
sheet1.Range["C2"].NumberValue = 625000000
sheet1.Range["A3"].Text = "タブレット"
sheet1.Range["B3"].NumberValue = 890
sheet1.Range["C3"].NumberValue = 267000000
# 2番目のワークシート - 在庫データ
sheet2 = workbook.Worksheets.Add("在庫データ")
sheet2.Range["A1"].Text = "製品名"
sheet2.Range["B1"].Text = "在庫数量"
sheet2.Range["C1"].Text = "倉庫位置"
sheet2.Range["A2"].Text = "ノートパソコン"
sheet2.Range["B2"].NumberValue = 350
sheet2.Range["C2"].Text = "Aエリア-01"
sheet2.Range["A3"].Text = "タブレット"
sheet2.Range["B3"].NumberValue = 280
sheet2.Range["C3"].Text = "Bエリア-03"
# 複数ワークシートのExcelファイルを保存
workbook.SaveToFile(inputFile, ExcelVersion.Version2013)
workbook.Dispose()
# 再読み込みしてHTMLに変換
workbook = Workbook()
workbook.LoadFromFile(inputFile)
# ワークブック全体をHTMLに変換(すべてのワークシートを含む)
workbook.SaveToHtml(outputFile)
workbook.Dispose()
print("ワークブック全体をHTMLに変換しました:MultiSheetReport.html")
説明:
-
Worksheets.Add()はワークブックに新しいワークシートを追加 -
workbook.SaveToHtml()はワークブックのすべてのワークシートをHTMLに変換 - 変換後のHTMLファイルにはナビゲーションリンクが含まれ、異なるワークシート間の切り替えが容易
ワークブックプレビュー:
应用场景:
- 月次総合レポート:営業、在庫、財務など複数の次元を含む
- プロジェクト管理ドキュメント:タスクリスト、進捗追跡、リソース配分などのワークシートを含む
- 学生成績管理システム:各クラスの成績、統計分析などのワークシートを含む
4. ストリーム出力を使用してHTMLに変換
HTMLコンテンツをさらに処理する必要があるシナリオでは、ストリーム出力方式を使用できます。変換結果をメモリストレームやカスタムストリームに保存できます:
from spire.xls import Workbook, HTMLOptions, Stream
inputFile = "SalesReport.xlsx"
outputFile = "SalesReport_Stream.html"
# Excelファイルを読み込み
workbook = Workbook()
workbook.LoadFromFile(inputFile)
# 最初のワークシートを取得
sheet = workbook.Worksheets[0]
# HTMLオプションを設定
options = HTMLOptions()
options.ImageEmbedded = True
# 出力ストリームを作成して変換
fileStream = Stream(outputFile)
sheet.SaveToHtml(fileStream, options)
fileStream.Close()
workbook.Dispose()
print("ストリーム出力でHTMLに変換しました:SalesReport_Stream.html")
説明:
-
Stream()はファイルストリームオブジェクトを作成し、出力プロセスを制御 -
SaveToHtml(fileStream, options)はワークシートの内容を指定されたストリームに書き込む -
fileStream.Close()はストリームを閉じてリソースを解放
优势:
- 書き込み前にHTMLコンテンツに対して追加処理が可能
- カスタム出力パスとファイル名をサポート
- 大規模なデータ処理フローへの統合が容易
5. 主要クラスとメソッドの解析
コアクラスの説明
Workbook クラス
Workbook はExcel操作全体のエントリーポイントであり、完全なExcelファイルを表します。
常用メソッド:
| メソッド | 説明 |
|---|---|
LoadFromFile(filePath) |
指定されたパスからExcelファイルを読み込む |
SaveToFile(filePath, version) |
ワークブックをExcelファイルとして保存 |
SaveToHtml(filePath) |
ワークブック全体をHTMLファイルに変換 |
Dispose() |
ワークブックが使用するリソースを解放 |
プロパティ:
| プロパティ | 説明 |
|---|---|
Worksheets |
ワークブック内のすべてのワークシートコレクションを取得 |
Worksheet クラス
Worksheet はExcel内の単一ワークシートを表し、データ操作の主要オブジェクトです。
常用メソッド:
| メソッド | 説明 |
|---|---|
SaveToHtml(filePath) |
現在のワークシートをHTMLファイルに変換 |
SaveToHtml(stream, options) |
ワークシートをHTMLに変換してストリームに書き込む |
AutoFitColumns() |
すべての列の幅を自動調整 |
プロパティ:
| プロパティ | 説明 |
|---|---|
Name |
ワークシート名を取得または設定 |
Range |
ワークシートのセル範囲オブジェクトを取得 |
HTMLOptions クラス
HTMLOptions はHTML変換の各種オプションを設定するために使用されます。
常用プロパティ:
| プロパティ | 説明 | デフォルト値 |
|---|---|---|
ImageEmbedded |
画像をHTMLに埋め込むかどうか(Base64エンコーディング) | False |
使用建议:
- ワークシートに画像やグラフが含まれる場合、必ず
ImageEmbedded = Trueを設定 - 画像の埋め込みはHTMLファイルサイズを増加させるが、外部ファイル依存を回避
- HTMLファイルを個別に配布するシナリオに適している
Stream クラス
Stream はストリームI/O操作を提供し、ファイル出力の柔軟な制御を可能にします。
常用メソッド:
| メソッド | 説明 |
|---|---|
Close() |
ストリームを閉じてリソースを解放 |
使用场景:
- 書き込み前にデータを処理する必要がある場合
- 出力をカスタムターゲットにリダイレクトする場合
- 非同期またはバッチ処理フローに統合する場合
6. 実应用例:自動化レポート公開
以下は完全な実際の応用シナリオで、営業レポートを自動生成してHTMLとして公開する方法を示します:
from spire.xls import Workbook, ExcelVersion, HTMLOptions
from datetime import datetime
def generate_sales_report():
"""営業レポートを生成してHTMLに変換"""
# 工作报告を作成
workbook = Workbook()
sheet = workbook.Worksheets[0]
sheet.Name = f"{datetime.now().strftime('%Y年%m月')}営業レポート"
# レポートタイトルを書き込み
sheet.Range["A1"].Text = "月次営業業績レポート"
sheet.Range["A1"].Style.Font.Size = 16
sheet.Range["A1"].Style.Font.IsBold = True
sheet.Range["A1"].Style.HorizontalAlignment = 1 # 中央揃え
# セルを結合してタイトルとして使用
sheet.Range["A1:F1"].Merge()
# ヘッダーを書き込み
headers = ["営業担当者", "製品カテゴリ", "販売数量", "単価(円)", "売上高(円)", "達成率"]
for col, header in enumerate(headers, start=1):
cell = sheet.Range[3, col]
cell.Text = header
cell.Style.Font.IsBold = True
cell.Style.Color = Color.get_LightBlue()
# 模擬営業データ
sales_data = [
["田中太郎", "ノートパソコン", 45, 550000, 24750000, 0.92],
["田中太郎", "タブレット", 32, 320000, 10240000, 0.88],
["佐藤花子", "ノートパソコン", 38, 550000, 20900000, 0.85],
["佐藤花子", "タブレット", 28, 320000, 8960000, 0.80],
["鈴木一郎", "ノートパソコン", 52, 550000, 28600000, 0.95],
["鈴木一郎", "タブレット", 41, 320000, 13120000, 0.91],
]
# データ行を書き込み
for row_idx, data in enumerate(sales_data, start=4):
for col_idx, value in enumerate(data, start=1):
cell = sheet.Range[row_idx, col_idx]
if isinstance(value, str):
cell.Value = value
elif isinstance(value, float):
cell.NumberValue = value
cell.Style.NumberFormat = "0%"
else:
cell.NumberValue = value
if col_idx >= 4: # 金額列
cell.Style.NumberFormat = "#,##0"
# 合計行を計算
total_row = len(sales_data) + 4
sheet.Range[total_row, 1].Text = "合計"
sheet.Range[total_row, 1].Style.Font.IsBold = True
# 列幅を自動調整
sheet.Range.AutoFitColumns()
# Excelファイルを保存
excel_file = f"Sales_Report_{datetime.now().strftime('%Y%m%d')}.xlsx"
workbook.SaveToFile(excel_file, ExcelVersion.Version2013)
# HTMLに変換
html_file = f"Sales_Report_{datetime.now().strftime('%Y%m%d')}.html"
options = HTMLOptions()
options.ImageEmbedded = True
sheet.SaveToHtml(html_file, options)
workbook.Dispose()
print(f"Excelレポートを生成しました:{excel_file}")
print(f"HTMLレポートを生成しました:{html_file}")
return html_file
# レポート生成を実行
generate_sales_report()
説明:
- 日付情報を含む動的ファイル名を使用し、バージョン管理を容易に
- フォーマットされたタイトルとヘッダーを追加し、レポートの専門性を向上
- 異なる数値書式を設定し、金額とパーセンテージを読みやすく表示
- 自動的に合計行を計算して追加
- ExcelとHTMLの両方の形式を同時に生成し、異なるニーズに対応
拡張方向:
- メール送信機能を追加し、HTMLレポートを関係者に自動送信
- Webサーバーに統合し、オンラインレポート閲覧サービスを提供
- 定時実行により、日報、週報、月報の自動生成を実現
まとめ
本記事の例を通じて、Pythonを使用してExcelファイルをHTML形式に変換する方法を理解できました。単一ワークシートの単純な変換から、ワークブック全体のバッチ処理、ストリーム出力の柔軟な応用まで、このプロセスは高度に自動化されており、企業レポート公開、データダッシュボード表示、オンラインドキュメント共有などのシナリオに特に適しています。
手動コピー&ペーストやオンライン変換ツールと比較して、Pythonベースのコード方式には以下の利点があります:
- 書式の完全保持:元のフォント、色、罫線などのスタイルを自動保持
- バッチ処理の高効率:複数のファイルを一度に処理でき、作業効率を大幅に向上
- 高いカスタマイズ性:ニーズに応じて変換オプションと出力形式を調整可能
- 統合の容易さ:自動化ワークフローやWebアプリケーションに簡単に組み込み可能
これを基盤に、より多くの機能を拡張できます:
- 定時タスクと組み合わせ、日報、週報の自動生成と公開を実現
- 社内システムに統合し、リアルタイムデータ閲覧機能を提供
- スタイルカスタマイズを追加し、生成されるHTMLが企業のビジュアル規範により適合するように
- データベースと組み合わせ、データ抽出からHTML公開までのエンドツーエンド自動化を実現
Excelデータのオンライン表示や自動化レポートのニーズを処理している場合、このPythonベースの変換ソリューションはあなたの仕事に顕著な向上をもたらすでしょう。
より高度な機能については、Free Spire.XLS for Python 公式ドキュメントを参照してください。

