MENU

大きなExcel帳票をPythonで順に書き出す方法

当ページのリンクには広告(PR)が含まれていることがあります。
大きなExcel帳票をPythonで順に書き出す方法。大量の明細行、順に書き出す、別ファイルで確認の処理例。

大量の明細を新しいExcelへ順に出すだけなら、全セルを通常のブックとして保持する必要がない場合があります。openpyxlには、行を追加しながら書き出すwrite_onlyというモードがあります。

既存帳票の特定セルを書き換える用途とは違います。新規ファイルへ上から順に出す処理として使い、後から前の行へ戻らない構成にします。

目次

書出し専用のシートへ行を追加

次は架空の三明細を使う小さな例です。freeze_panesを先に設定してから見出しと明細を追加し、一度だけ保存します。その後、読み取り専用で結果を開き直して検算します。

from io import BytesIO
from openpyxl import Workbook, load_workbook

book = Workbook(write_only=True)
sheet = book.create_sheet("明細")
sheet.freeze_panes = "A2"
sheet.append(["ID", "金額"])
for row in [("A", 100), ("B", 200), ("C", 50)]:
    sheet.append(row)

buffer = BytesIO()
book.save(buffer)
book.close()
check = load_workbook(BytesIO(buffer.getvalue()), read_only=True)
try:
    rows = check["明細"].iter_rows(values_only=True)
    header = next(rows)
    count = 0
    total = 0
    for key, amount in rows:
        count += 1
        total += amount
    print("明細件数:", count)
    print("金額合計:", total)
    assert header == ("ID", "金額")
    assert count == 3 and total == 350
finally:
    check.close()

明細件数は3、金額合計は350です。Windows・Python 3.12.10・openpyxl 3.1.5で、書き出しと読み戻しを確認しました。大きなデータの処理速度やメモリーの削減量を測った例ではありません。

ここでは説明用に三明細をリストで用意しています。実際の大量入力を全部リストへためると、ブック側を変えても入力側でメモリーを使います。CSVなどから一件ずつ読む部分も合わせて設計します。

後戻りできない順序で組み立てる

write_onlyでは通常のシートのように任意のセルを読み、前の行を書き換える使い方はできません。末尾に合計を出すなら、明細を追加しながら合計値を保持し、最後に合計行を追加します。

freeze_panesなど、行データより前へ保存される設定は先に用意します。列幅や書式が必要なら、その設定をいつ確定できるかも確認してください。列の最大文字数を全件見てから幅を決める処理を、そのまま一回の書出しへ移せるとは限りません。

保存は一度だけです。途中保存し、続きを同じブックへ追加して再保存する運用にはしません。途中で止まった場合は、未完成の出力を完成品として扱わず、元の入力からやり直す条件を決めます。

読み戻すときも全件をためない

例ではiter_rowsを順に読み、件数と合計だけを残しています。読み戻した全行をlistへ変えると、その分のメモリーが必要になります。検算の目的に合う値だけを積み上げます。

Excelで扱える行数や列数、共有先の環境も別の制約です。ファイルが作れたことだけで、受け取る人が開けるとは判断しません。実際に共有する条件で開き、見出しと最後の明細まで確認します。

通常のブック編集はopenpyxl入門、値を保存して確かめる流れはExcel保存の基本で補えます。

参考資料

openpyxlの最適化モード公式資料を2026年11月1日に確認しました。

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次