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?

PythonでExcelワークシートを画像に変換:データレポートの画像化出力

0
Posted at

企業の日常業務において、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ワークブックは以下のとおりです。

サンプルの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")

ワークシートのプレビュー:

Excelワークシート全体を画像に変換

説明:

  • sheet.FirstRowsheet.FirstColumnsheet.LastRowsheet.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("指定範囲の画像が保存されました")

効果の比較:

指定セル範囲をPNG画像に変換

指定セル範囲をJPG画像に変換

説明:

  • 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.LeftMarginRightMarginTopMarginBottomMargin は、書き出し画像の四方向の余白を制御します。単位は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 公式チュートリアルをご参照ください。

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?