Open1

OpenPyXLのwrite_onlyフラグ

m10k1m10k1

openpyxlのwrite_onlyフラグは、大量のデータをExcelファイルに書き込む際のメモリ効率を大幅に改善するオプション。

write_onlyモードの特徴

メモリ効率

  • 通常モードでは全てのセルデータがメモリに保持されますが、write_onlyモードでは書き込み後すぐにメモリから解放される。
  • 数百万行のデータを扱う場合、メモリ使用量を大幅に削減できる。

制限事項

  • セルの読み取りができない(書き込み専用)
  • セルの値を後から変更できない
  • 数式の結果を取得できない
  • ワークシートの既存データにアクセスできない

使用方法

from openpyxl import Workbook

# write_onlyモードでワークブック作成
wb = Workbook(write_only=True)
ws = wb.create_sheet()

# データの書き込み
for row in range(1, 100000):
    ws.append([f'データ{row}', row * 2, row * 3])

wb.save('大量データ.xlsx')

通常モードとの比較

# 通常モード(小〜中規模データ向け)
wb_normal = Workbook()
ws_normal = wb_normal.active
ws_normal['A1'] = 'テスト'  # セルへの個別アクセス可能

# write_onlyモード(大規模データ向け)
wb_write_only = Workbook(write_only=True)
ws_write_only = wb_write_only.create_sheet()
# ws_write_only['A1'] = 'テスト'  # エラー:個別セルアクセス不可
ws_write_only.append(['テスト'])  # append()のみ使用可能

大量のデータを扱う場合や、メモリ使用量を抑えたい場合にwrite_only=Trueを設定することで、パフォーマンスを大幅に向上させることができる。