MENU

Excelの00123と123|Pythonで値と表示を分ける

当ページのリンクには広告(PR)が含まれていることがあります。
Excelの00123と123|Pythonで値と表示を分ける。Excelのセル、値と書式を分離、表示の違いの処理例。

Excelで00123と見えるセルが、Pythonでは123として読み込まれることがあります。セルの値が数値123で、表示形式だけを五桁のゼロ埋めにしている場合です。文字列00123を保存したセルとは、見た目が似ていても中身が違います。

openpyxlではセルのvalueで値、number_formatで表示形式を読めます。商品コードを取り込む前に、値と見せ方のどちらにゼロがあるかを確認します。

目次

数値と文字列を別のセルへ保存

次の例は既存の帳票を開かず、架空のブックをメモリー上に作ります。A1は数値123と表示形式00000、B1は文字列00123です。保存後に読み直し、値と型を表示します。

from io import BytesIO
from openpyxl import Workbook, load_workbook

book = Workbook()
sheet = book.active
sheet["A1"] = 123
sheet["A1"].number_format = "00000"
sheet["B1"] = "00123"

buffer = BytesIO()
book.save(buffer)
book.close()
check = load_workbook(BytesIO(buffer.getvalue()))
sheet = check.active
print("A1の値:", repr(sheet["A1"].value), type(sheet["A1"].value).__name__)
print("A1の表示形式:", sheet["A1"].number_format)
print("B1の値:", repr(sheet["B1"].value), type(sheet["B1"].value).__name__)
assert sheet["A1"].value == 123
assert sheet["B1"].value == "00123"
check.close()

A1はint型の123で表示形式が00000、B1はstr型の00123です。Windows・Python 3.12.10・openpyxl 3.1.5で、保存後の値と型を確認しました。Excelの画面上の表示を確認した結果ではありません。

number_formatを文字列へ付けても、それだけで値が数値へ変わるわけではありません。書式の指定と値の変換を、同じ処理として扱わないことがポイントです。

五桁へ補う規則を勝手に決めない

123を00123へ直すには、常に五桁であるという仕様が必要です。表示がゼロ埋めになっていることは手がかりになりますが、入力元が正しいコード体系を保っているかまで保証しません。

zfill(5)などで桁を補う処理を入れる場合は、桁数、英字を含むコード、空欄、五桁を超える値の扱いも決めます。数値123と文字列123を同じコードとみなしてよいかも確認してください。

一般の表示形式には、日付、通貨、条件付きの表示などがあります。number_formatを見て、どの形式でも画面どおりの文字列へ自動変換できると考えないようにします。この例は単純なゼロ埋めだけを扱います。

取り込み先にも型を引き継ぐ

Excel側で文字列として読めても、CSVへ保存して別の道具で開く段階で、再び数値として解釈される場合があります。コードを保持する確認は読み込みだけで終えず、保存して次に読むところまで行います。

比較用のコードを作るなら、元のセル座標、元の値、元の型、採用した変換規則を残すと、照合できない理由を追いやすくなります。元帳票へ一律の書式変更を加えて合わせる必要はありません。

最初は数値のセル、文字列のセル、空欄を含む小さなコピーで試してください。見た目がそろっている表ほど、値と書式の違いを先に確認すると後の取り違えを減らせます。

セル操作の基本はopenpyxl入門、文字列の桁や空白を扱う操作はPythonの文字列操作で確認できます。

参考資料

openpyxlのスタイル公式資料を2026年11月1日に確認しました。

この記事を書いた人

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

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

目次