企業の日常業務において、Excelレポートは最も一般的なデータ納品形式の一つです。しかし、メール、PowerPoint資料、Webサイト、自動生成レポートなどにExcelワークシートを画像として埋め込みたい場面が多々あります。手動でのスクリーンショットは効率が低く、バッチ処理にも不向きで、画像の品質やフォーマットの統一性も保証できません。数十枚のワークシートを一枚ずつ画像として書き出す必要がある場合、手動作業はほぼ不可能です。
Pythonプログラミングを活用すれば、Excelワークシートを高精度で画像に変換でき、変換範囲、出力形式、余白を柔軟に制御できます。プロセス全体は完全自動化されており、定期レポートの生成、データスナップショットのアーカイブ、クロスプラットフォームでのデータ共有などのシーンに最適です。
本記事では、Free Spire.XLS for Python を使用して、Excelワークシートを画像に変換する方法を紹介します。シート全体の書き出し、指定範囲の書き出し、余白の除去、複数シートのバッチ書き出しなど、よくあるニーズを網羅しています。
1. 環境準備とライブラリのインストール
始める前に、Free Spire.XLS for Pythonがインストールされていることを確認してください。
pip install spire.xls.free
インストール完了後、コード内で関連クラスをインポートし、Excelファイルの操作を開始できます。
本教程で使用するサンプルのExcelワークブックは以下のとおりです。
2. ワークシート全体を画像に変換する
最も一般的なシーンは、ワークシート内のすべてのデータ領域を一枚の画像として完全に書き出すことです。以下のサンプルでは、既存のExcelファイルを読み込み、データ範囲を自動認識してPNG形式で保存します。
from spire.xls import *
# Excelファイルを読み込む
workbook = Workbook()
workbook.LoadFromFile("SampleWorkbook.xlsx")
# 最初のワークシートを取得する
sheet = workbook.Worksheets[0]
# データ領域全体を画像に変換して保存する
sheet.ToImage(
sheet.FirstRow,
sheet.FirstColumn,
sheet.LastRow,
sheet.LastColumn
).Save("QuarterlySales_Full.png")
workbook.Dispose()
print("シート全体の画像が保存されました:QuarterlySales_Full.png")
ワークシートのプレビュー:
説明:
-
sheet.FirstRow、sheet.FirstColumn、sheet.LastRow、sheet.LastColumnは、ワークシートのデータ領域の境界を自動的に取得します。行番号や列番号を手動で指定する必要はありません。 -
ToImage()メソッドは画像オブジェクトを返し、.Save()を呼び出すことでファイルとして保存できます。出力形式はファイル拡張子(.png、.jpg、.bmpなど)によって決まります。 - この方法は、内容が固定されたレポートの書き出しに適しており、出力結果はExcelでの表示効果と高い一致性を保ちます。
3. 指定セル範囲を画像に変換する
ワークシートの一部のデータだけを書き出したい場合があります。例えば、メールの要約や簡報の挿絵用に、ヘッダー行と数行のデータのみを保持したい場合などです。ToImage() メソッドは、行番号と列番号を直接指定して変換範囲を制御できます。
from spire.xls import *
workbook = Workbook()
workbook.LoadFromFile("SampleWorkbook.xlsx")
sheet = workbook.Worksheets[0]
# 第4行から第12行(ヘッダーとデータ行を含む)、第1列から第5列を書き出す
sheet.ToImage(4, 1, 12, 5).Save("QuarterlySales_HeaderData.png")
# 別の範囲を書き出し、JPG形式で保存する
sheet.ToImage(4, 1, 8, 5).Save("QuarterlySales_TopRegion.jpg")
workbook.Dispose()
print("指定範囲の画像が保存されました")
効果の比較:
説明:
-
ToImage(startRow, startColumn, endRow, endColumn)のパラメータは 1始まり の行番号と列番号で、書き出し範囲を正確に制御します。 - 同一ワークシートに対して異なる範囲で
ToImage()を複数回呼び出し、異なる形式で保存することで、さまざまな公開チャネルの要件に対応できます。 - この方法は、データサマリーカード、KPI指標のスクリーンショット、チャットメッセージへの埋め込み画像の生成に非常に適しています。
4. 画像周囲の余白を除去する
デフォルトでは、書き出された画像に一定のページ余白が含まれる場合があり、他のドキュメントへの埋め込み効果に影響することがあります。ページ余白をすべて0に設定することで、この余白を解消できます。
from spire.xls import *
workbook = Workbook()
workbook.LoadFromFile("SampleWorkbook.xlsx")
sheet = workbook.Worksheets[0]
# 四方向のページ余白を0に設定して空白を除去する
sheet.PageSetup.LeftMargin = 0
sheet.PageSetup.RightMargin = 0
sheet.PageSetup.TopMargin = 0
sheet.PageSetup.BottomMargin = 0
# 変換して余白のない画像を保存する
image = sheet.ToImage(
sheet.FirstRow,
sheet.FirstColumn,
sheet.LastRow,
sheet.LastColumn
)
image.Save("QuarterlySales_NoMargin.png")
workbook.Dispose()
print("余白なしの画像が保存されました:QuarterlySales_NoMargin.png")
効果の比較:
説明:
-
sheet.PageSetup.LeftMargin、RightMargin、TopMargin、BottomMarginは、書き出し画像の四方向の余白を制御します。単位はExcelのページ余白と同じです。 - 余白をゼロにすると、画像はデータ領域にぴったり密着し、他のドキュメントやUI画面への埋め込みに適した状態になります。トリミングの手間も省けます。
- 特定の方向のみ余白を除去したい場合は、対応する余白プロパティのみを設定すればOKです。
5. 複数ワークシートを一括で個別画像に変換する
一つのExcelファイルに複数のワークシートが含まれている場合、Worksheets コレクションを順次処理して、各ワークシートを個別の画像ファイルとして書き出せます。ファイル名はワークシート名に基づいて命名されます。
import os
from spire.xls import *
workbook = Workbook()
workbook.LoadFromFile("SampleWorkbook.xlsx")
# 出力ディレクトリを作成する
outputDir = "SheetImages"
os.makedirs(outputDir, exist_ok=True)
# すべてのワークシートを順次画像に変換する
for sheet in workbook.Worksheets:
# 余白を除去する
sheet.PageSetup.LeftMargin = 0
sheet.PageSetup.RightMargin = 0
sheet.PageSetup.TopMargin = 0
sheet.PageSetup.BottomMargin = 0
# ワークシート名で画像ファイルを命名する
fileName = os.path.join(outputDir, f"{sheet.Name}.png")
image = sheet.ToImage(
sheet.FirstRow,
sheet.FirstColumn,
sheet.LastRow,
sheet.LastColumn
)
image.Save(fileName)
print(f"保存完了:{fileName}")
workbook.Dispose()
print("すべてのワークシートの画像書き出しが完了しました")
出力結果:
説明:
-
workbook.Worksheetsはイテラブルなコレクションで、for sheet in workbook.Worksheetsにより各ワークシートに順次アクセスできます。 -
sheet.Nameをファイル名として使用することで、出力ファイルとワークシートが一対一に対応し、管理と検索が容易になります。 - 余白ゼロの設定と組み合わせることで、バッチ出力された画像の品質が統一され、自動レポート生成パイプラインにそのまま利用できます。
6. 主要クラス・メソッド・プロパティの解説
上記のサンプルを通じて、Excelワークシートの画像変換に必要なコアAPIをまとめます。下表に主要なクラス、メソッド、プロパティとその用途を示します。
| クラス / メソッド / プロパティ | 説明 |
|---|---|
Workbook |
Excelブックオブジェクト。Excelファイルの読み込み、作成、保存をサポート |
Workbook.LoadFromFile(path) |
ローカルパスからExcelファイルを読み込む |
Workbook.Worksheets |
ブック内の全ワークシートのコレクションを取得。インデックスアクセスと走査をサポート |
Workbook.Dispose() |
ブックが占有するリソースを解放。使用後に呼び出すべき |
Worksheet |
単一ワークシートオブジェクト。データ操作と画像変換の主体 |
Worksheet.FirstRow / FirstColumn
|
ワークシートのデータ領域の先頭行 / 先頭列のインデックスを取得 |
Worksheet.LastRow / LastColumn
|
ワークシートのデータ領域の最終行 / 最終列のインデックスを取得 |
Worksheet.Name |
ワークシート名を取得または設定。ファイル命名によく使用 |
Worksheet.ToImage(startRow, startCol, endRow, endCol) |
指定セル範囲を画像オブジェクトに変換 |
Image.Save(path) |
画像をローカルファイルに保存。形式は拡張子で決定(.png / .jpg / .bmp) |
Worksheet.PageSetup.LeftMargin など |
書き出し画像のページ余白を設定。0に設定すると空白を除去可能 |
技術補足
-
画像形式の選択:
.Save()メソッドはファイル拡張子に基づいて形式を自動判別します。PNGは透明背景や高品質なテキストが必要な場合、JPGはファイルサイズを抑えたい場合、BMPは無損失ビットマップ形式として適しています。 -
座標パラメータの意味:
ToImage()の四つのパラメータはすべて 1始まり の整数です。行番号・列番号は1から始まり、Excelのセルアドレスに対応します。 -
リソースの解放:操作完了後に
workbook.Dispose()を呼び出すのは良い習慣です。ファイルのロックやメモリリークを防止できます。
まとめ
本記事では、実際の業務レポートファイルを例に、Free Spire.XLS for Python を使ってExcelワークシートを画像に変換する方法を紹介しました。シート全体の書き出し、指定範囲の書き出し、余白の除去、複数シートのバッチ書き出しという四つの一般的なシーンを網羅しています。コードによる画像書き出しは、手動スクリーンショットと比べて高い精度、一致性、拡張性を持ち、自動レポートシステム、メール配信、データスナップショットアーカイブなどのワークフローへの組み込みに最適です。
これを基にさらに拡張が可能です。例えば、メールライブラリと連携して画像レポートを自動送信する、Webアプリケーションに組み込んでオンラインプレビューを実現する、スケジュールタスクと組み合わせて定期的なデータスナップショットを生成するなどです。PythonでのExcel操作の詳細については、Spire.XLS for Python 公式チュートリアルをご参照ください。





