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にデータを書き込む方法

Posted at

データドリブンな業務フローにおいて、Microsoft Excel は依然として最も広く利用されている表計算ツールの一つであり、データの保存、分析、レポート作成など、さまざまな場面で活用されています。しかし、Excel ファイルを手作業で管理・更新する方法は非効率であるだけでなく、ヒューマンエラーを招きやすいという課題があります。特に、大量データの処理や定期レポートの生成、異なるシステムからの出力データを統合するケースでは、自動化の重要性が一層高まります。

Python は豊富なライブラリエコシステムを備えており、業務自動化の分野で大きな強みを発揮します。本記事では Free Spire.XLS for Python を使用し、さまざまなデータ型を Excel ファイルへ効率的かつ安定して書き込む方法を解説します。あわせて、書式設定、数式の挿入、画像の追加、ハイパーリンクの作成といった実用的な機能も紹介します。

環境構築と基本的な使い方

ライブラリのインストール

事前に Python がインストールされていることを確認し、以下のコマンドで Free Spire.XLS for Python をインストールします。

pip install spire.xls.free

基本的な書き込み例

次のコードは、新しい Excel ブックを作成し、セルへのデータ書き込み、書式設定を行ったうえでファイルを保存する一連の流れを示しています。

from spire.xls import *

workbook = Workbook()
sheet = workbook.Worksheets.get_Item(0)

# テキストの書き込み
sheet.Range["B2"].Value = "Hello, Python & Excel!"

# 書式設定
sheet.Range.AutoFitColumns()
sheet.Range.BorderAround(LineStyleType.Medium, Color.get_MediumBlue())
sheet.Range.Style.Color = Color.get_LightGray()

# 保存してリソースを解放
workbook.SaveToFile("HelloWorld.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

出力結果のイメージ:

PythonでExcelファイルを作成する例

主なオブジェクトの説明:

  • Workbook:Excel ファイル全体を表すオブジェクト。Workbook() により新規作成すると、既定で 3 つのワークシートが含まれます。
  • WorksheetWorksheets[index] を通じて特定のワークシートにアクセスします。
  • Range[cell_ref]:A1 形式の参照、または行・列インデックスを指定してセルを取得します。
  • .Value / .NumberValue / .DateTimeValue / .BooleanValue:それぞれ文字列、数値、日時、真偽値を書き込むためのプロパティです。
  • .SaveToFile():ブックを指定したパスへ保存します。
  • .Dispose():内部リソースを明示的に解放し、メモリリークを防ぎます。

複数データ型の書き込み方法

テキストと数値

文字列・整数・浮動小数点数は直接セルに書き込めます。数値については、Excel 上で正しく数値として扱われるよう、NumberValue の使用が推奨されます。

sheet.Range["A1"].Value = "商品名"
sheet.Range["B1"].Value = "売上金額"
sheet.Range["A2"].Value = "ノートパソコン"
sheet.Range["B2"].NumberValue = 12000
sheet.Range["A3"].Value = "スマートフォン"
sheet.Range["B3"].NumberValue = 8500.75

出力結果のイメージ:

Pythonでテキストと数値を書き込む例

日付と時刻

Spire.XLS では、DateTimeValue を使用して日付・時刻データを書き込みます。内部的には Python 標準の datetime ではなく、spire.xls.common.DateTime 型を使用する点に注意してください。

from spire.xls.common import *
import datetime

# 現在の UTC 時刻を書き込み
sheet.Range["B1"].DateTimeValue = DateTime.get_UtcNow()

# 指定した日付を書き込み
sheet.Range["B2"].DateTimeValue = DateTime.Parse("2023-05-01")

# Python の datetime オブジェクトを変換
py_time = datetime.datetime(2023, 5, 1, 10, 30)
time_str = py_time.strftime("%Y-%m-%d %H:%M:%S")
sheet.Range["B3"].DateTimeValue = DateTime.Parse(time_str)

# 表示形式を設定
sheet.Range["B1"].Style.NumberFormat = "yyyy-mm-dd hh:mm:ss"

sheet.Range.AutoFitColumns()

出力結果のイメージ:

Pythonで日付と時刻を書き込む例

真偽値(Boolean)

真偽値は BooleanValue プロパティを使用して書き込みます。

sheet.Range["B1"].BooleanValue = True
sheet.Range["B2"].BooleanValue = False

出力結果のイメージ:

PythonでBoolean値を書き込む例

リスト・タプルの書き込み

一次元配列をまとめて書き込む場合は、InsertArray メソッドが便利です。行方向または列方向への挿入を指定できます。

header = ["ID", "氏名", "年齢"]
data = [[1, "山田太郎", 30], [2, "佐藤花子", 25]]

# ヘッダー行を挿入
sheet.InsertArray(header, 1, 1, False)

# データを1行ずつ書き込み
for i, row in enumerate(data, start=2):
    for j, value in enumerate(row, start=1):
        sheet.Range[i, j].Value = str(value)

出力結果のイメージ:

Pythonでリスト・タプルを書き込む例

InsertArray の第4引数 is_row は挿入方向を指定します。False の場合は横方向(行として)に挿入されます。
また、本メソッドは同一データ型の一次元配列のみをサポートします。整数・文字列・浮動小数点数などが混在する場合は、上記のようにループでセル単位に書き込む方法が安全です。

辞書(dict)のリスト

辞書のリストを表形式で出力する場合、キーを列見出しとして扱うのが一般的です。

products = [
    {"ID": "P001", "商品名": "キーボード", "価格": 199},
    {"ID": "P002", "商品名": "マウス", "価格": 99}
]

if products:
    headers = list(products[0].keys())
    sheet.InsertArray(headers, 1, 1, False)
    
    for r_idx, item in enumerate(products, start=2):
        values = [item[k] for k in headers]
        # 現在のバージョンではセル単位での代入が必要
        for c_idx, val in enumerate(values, start=1):
            sheet.Range[r_idx, c_idx].Value = str(val)

出力結果のイメージ:

Pythonで辞書リストを書き込む例

応用機能

数式の挿入

Excel の数式は Formula プロパティを使って直接書き込めます。計算処理は Excel 側で行われます。

sheet.Range["A1"].NumberValue = 10
sheet.Range["A2"].NumberValue = 20
sheet.Range["B1"].Formula = "=SUM(A1:A2)"
sheet.Range["B2"].Formula = "=AVERAGE(A1:A2)"

画像の挿入

Pictures.Add(row, col, image_path) を使用すると、指定位置に画像を挿入できます。

sheet.Pictures.Add(3, 1, "logo.png")
# サイズ調整の例
# pic = sheet.Pictures.Add(3, 1, "logo.png")
# pic.Width, pic.Height = 100, 50

ハイパーリンクの作成

外部 URL へのリンク、または同一ブック内のシートへのリンクを作成できます。

# 外部リンク
cell = sheet.Range[7, 1]
cell.Text = "Python公式サイト"
link = sheet.HyperLinks.Add(cell)
link.Address = "https://www.python.org"

# 内部リンク
detail_sheet = workbook.Worksheets.Add("詳細ページ")
target_cell = detail_sheet.Range["A3"]
target_cell.Text = "詳細ページへ移動"
internal_link = sheet.HyperLinks.Add(sheet.Range[8, 1])
internal_link.Address = f"{detail_sheet.Name}!A1"

出力結果のイメージ:

Pythonで数式・画像・リンクを書き込む例

ベストプラクティス

  1. リソース管理:処理完了後は必ず workbook.Dispose() を呼び出し、非管理リソースを解放します。
  2. 例外処理:実運用では try...except を使用し、ファイル I/O や権限エラーに備えましょう。
  3. パフォーマンス対策:大量データの場合、セル単位の書き込みは避け、InsertArray や範囲指定による一括処理を優先します。
  4. パス管理:出力先ディレクトリの存在と書き込み権限を事前に確認し、画像パスは実行環境から有効なパスを指定してください。

まとめ

Free Spire.XLS for Python は、基本的なデータ書き込みから高度な書式制御まで対応する、柔軟かつ実用性の高い Excel 操作ライブラリです。Python による Excel 自動化を導入することで、業務効率の向上と人的ミスの削減が期待できます。レポート自動生成、データエクスポート、システム連携など、さまざまな業務シーンで活用できるでしょう。

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?