openpyxlでエクセルファイルを編集しているんだけど、
数字が文字列として保存されている…。
これを数値に変換することはできないの?
なるほど…。
では今回は、「文字列として保存された数字をopenpyxlで数値に変換する方法」を
できるだけわかりやすく解説いたします。
また「1.11111E+12」のような表示になった場合の対処法も解説いたしますので、
ぜひ最後まで読んでいってください。
文字列として保存された数字をopenpyxlで数値に変換する方法
「isinstance」を使います。まずは全コードと実行結果をお見せします。
解説は後ほど行います。
全コード
import openpyxl
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
cell = ws['A1']
if isinstance(cell.value, str) and cell.value.isdigit():
cell.value = int(cell.value)
wb.save('C:/Utatane/output.xlsx')
if isinstance(cell.value, str) and cell.value.isdigit():
cell.value = int(cell.value)
実行結果
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、既存ファイルを開いて保存する方法など、基本解説も行っておりますのでご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
セルを変数に代入
まずは対象のセルを変数に代入します。
cell = ws['A1']
【コードの解説】
新しい名前の変数を書いたら、「=(イコール)」を書きます。
今回はわかりやすく「cell」という名前にしましたが、何でも構いません。
しかしながら、つけられない名前があったりしますので、下記記事をご参考ください。
イコールの後ろには、ワークシートが入った変数に続けて[]を書きます。
[]内には対象のセル名を書きましょう。
セル名は「’(クォーテーション)」で囲ってください。
数値に変換
次に、対象のセルに入った文字を数値に変換します。
if isinstance(cell.value, str) and cell.value.isdigit():
cell.value = int(cell.value)
if文を使って、セルの値が数字のみの文字列なら、その値を数値に変換するというものです。
if文については、下記記事をご参考ください。
【コードの解説】8~9行目
上記サンプルコードをコピペして、変数である「cell(4ヶ所)」のみ書き換えるのが無難です。
<8行目>
「isinstance(cell.value, str)」は「cellの値が文字列なら」という意味で、
「cell.value.isdigit()」は「数字のみ」という意味になります。
間に「and」があるため、「セルの値が数字のみの文字列なら」という式になります。
<9行目>
cellの値をint型(整数型)に変換しています。
下図のように「’」が頭に付いている場合でも数値に変換されます。ご安心ください。
「1.11111E+12」のような表記になった場合の対処法
エクセルを操作しているときに、上図のような表示を1度は見たことがあるのではないでしょうか。
これもopenpyxlで数値に変換することができます。
import openpyxl
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
cell = ws['A1']
cell.number_format = '0'
wb.save('C:/Utatane/output.xlsx')
8行目のみ解説いたします。
【コードの解説】
セルを代入した変数に続けて「.number_format = ‘0’」を書きます。
これでセルの表示形式が数値に変更されるため、下図のような正しい表示となります。
表示形式の変更については、下記記事をご参考ください。
全てのセルを数値に変換
上図のように、数値に変換したいセルがたくさんあった場合に便利な方法を紹介いたします。
下記のコードを実行することで、全てのセルを数値に変換することができます。
import openpyxl
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
for row in ws.iter_rows():
for cell in row:
if isinstance(cell.value, str) and cell.value.isdigit():
cell.value = int(cell.value)
cell.number_format = '0'
wb.save('C:/Utatane/output.xlsx')
▼実行結果
コードの6~10行目にて、これまで解説した処理を全てのセルに適用しています。
「iter_rows」でセルを変数に代入し、「for文」で全てのセルを処理するという流れです。
iter_rowsやfor文については下記記事をご参考ください。
うまく動作しない場合の対処法
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlで文字列として保存された数字を数値に変換する方法を解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!