Excel ファイルの内容を Web 上で表示したり、他のドキュメントに埋め込んだりする際に、SVG 形式に変換できると便利です。SVG はベクター形式であるため拡大縮小による画質劣化がなく、またブラウザでネイティブ表示できる利点があります。本記事では、Python を使って Excel ワークシートをSVG画像に変換する方法について解説します。
必要な環境
- Python 3.6 以上
- Spire.XLS for Python(サードパーティ製ライブラリ)
今回使用するライブラリは、Excel ファイルの読み込み、編集、フォーマット変換などの機能を提供するものです。商用ライブラリですが、無料枠が提供されているバージョンも存在します。利用条件の詳細は公式ドキュメントで確認してください。
インストール
ライブラリのインストールは pip で行います。
pip install Spire.Xls
インストール後に import できることを確認しておきましょう。
from spire.xls import *
from spire.xls.common import *
実装手順
1. ワークシート全体をSVGに変換する
最も基本的な変換処理です。ワークブックを読み込み、対象シートをSVGとして保存します。
from spire.xls import *
from spire.xls.common import *
# ワークブックの読み込み
workbook = Workbook()
workbook.LoadFromFile("report.xlsx")
# 先頭シートを取得
worksheet = workbook.Worksheets[0]
# SVG として保存
worksheet.SaveToSVG("output.svg")
このコードでは、シート上のセル値に加え、フォント、背景色、罫線、セル結合などの書式情報も可能な範囲で SVG に反映されます。
2. 特定のセル範囲のみをSVGに変換する
シートの一部だけを画像化したい場合は、範囲を指定します。
# A1~E10(0 行 0 列~ 9 行 4 列)の範囲を SVG 化
stream = worksheet.ToSVGStream(0, 0, 9, 4)
stream.Save("range_output.svg")
ToSVGStream の引数は「開始行インデックス, 開始列インデックス, 終了行インデックス, 終了列インデックス」(いずれも0始まり)です。
3. 複数シートを一括で SVG に変換する
ブック内の全シートを個別の SVG ファイルとして出力する例です。
workbook = Workbook()
workbook.LoadFromFile("multi_sheet.xlsx")
for i in range(workbook.Worksheets.Count):
sheet = workbook.Worksheets[i]
sheet.SaveToSVG(f"{sheet.Name}.svg")
シート名をそのままファイル名に利用することで、元の構成を識別しやすくなります。
実装上注意すべき点
フォントの依存関係
SVG 変換時に参照されるフォントは、実行環境にインストールされているものに限られます。Excel ファイル側で指定されているフォントが環境に存在しない場合、代替フォントで描画されます。特に日本語を含むファイルを扱う際は、実行環境に適切な日本語フォントが導入されていることを確認してください。
埋め込みオブジェクトの再現性
セル内の画像や図形などのオブジェクトも変換対象に含まれますが、オブジェクトの種類や複雑さによっては、元のレイアウトと完全に一致しない場合があります。変換結果を確認し、必要に応じて元ファイル側の調整を検討してください。
メモリ使用量
大量のデータを含む Excel ファイルを処理する場合、メモリ消費が大きくなることがあります。バッチ処理を行う場合は、逐次的なファイル処理と適切なリソース解放を意識してください。
例外処理を含む実装例
実際の運用を見据え、エラーハンドリングを加えた例を示します。
from spire.xls import *
from spire.xls.common import *
import os
def convert_excel_to_svg(input_path, output_dir="output"):
"""
Excel ファイルの全シートを SVG に変換する。
Args:
input_path (str): 入力ファイルのパス
output_dir (str): 出力先ディレクトリ
"""
if not os.path.exists(input_path):
raise FileNotFoundError(f"指定されたファイルが見つかりません: {input_path}")
os.makedirs(output_dir, exist_ok=True)
workbook = Workbook()
try:
workbook.LoadFromFile(input_path)
for i in range(workbook.Worksheets.Count):
sheet = workbook.Worksheets[i]
output_path = os.path.join(output_dir, f"{sheet.Name}.svg")
sheet.SaveToSVG(output_path)
print(f"変換完了: {sheet.Name} -> {output_path}")
except Exception as e:
print(f"変換処理中にエラーが発生しました: {e}")
どのような場面で役立つか
- 帳票やレポートを Web アプリケーション上でプレビュー表示する
- ブログやドキュメントに表組みを画像として埋め込む
- 定期更新されるデータを、自動で画像ファイルとして出力する
- 異なる環境間でのレイアウト崩れを防ぎながら Excel の内容を共有する
まとめ
本記事では、Python を用いて Excel ワークシートをSVG形式に変換する手法を紹介しました。ワークシート全体だけでなく、範囲指定による部分的な出力や複数シートの一括変換も少ないコードで実現できます。
実装時には、フォント環境やメモリ使用量といった点に留意しつつ、要件に合わせた変換処理を構築してみてください。