下図のように、セル内に数値が入っている。
これを取得したいんだけど、通常なら数値として取得されてしまう…。
文字列として取得する方法があれば知りたい。
なるほど…。
では今回は、「openpyxlでセル内の数値を文字列として取得する方法」を
できるだけわかりやすく解説いたします。
また、「全セルの数値を文字列として取得・書き込みする方法」も
解説いたしますので、ぜひ最後まで読んでいってください。
openpyxlでセル内の数値を文字列として取得・書き込みする方法
「str()」を使って型変換を行います。まずは全コードと実行結果をお見せします。
解説は後ほど行います。
全コード
A1セルの数値を文字列として再度A1セルに書き込みした例です。
import openpyxl
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
cell = ws['A1']
if isinstance(cell.value, int):
cell.value = str(cell.value)
wb.save('C:/Utatane/output.xlsx')
if isinstance(cell.value, int):
cell.value = str(cell.value)
実行結果
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、既存ファイルを開いて保存する方法など、基本解説も行っておりますのでご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
インポート~ブック・シートの取得
import openpyxl
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
上記コードにて、エクセル操作に必要な「openpyxl」のインポートと、エクセルブック・シートを取得しています。
詳細は、「インストール方法」の記事をご参考ください。
セルの取得
cell = ws['A1']
上記コードにて、対象のセルを取得しています。
【コードの解説】
新しい名前の変数を書いたら、「=(イコール)」を書きます。
今回はわかりやすく「cell」という名前の変数にしましたが、何でも構いません。
しかしながら、つけられない名前があったりしますので、下記記事をご参考ください。
イコールの後ろには、ワークシートが入った変数に続けて[]を書きます。
[]内には対象のセル名(今回はA1)を書きましょう。
セル名は「’(クォーテーション)」で囲ってください。
型変換~セルへの書き込み
if isinstance(cell.value, int):
cell.value = str(cell.value)
上記コードにて、セル(cell)の値(value)が数値(int型)なら、文字列(str型)に変換し書き込みするという処理を行っております。
if文を使いますので、初めて見る方は下記記事をご参考ください。
if isinstance(cell.value, int):
【コードの解説】
「if isinstance():」を書きます。
()内には、セルを取得した変数に続けて「.value」を書いてください。
「,(カンマ)」を書いたら、「int」を書きます。
「isinstance」は値の型(intなのかstrなのか)を判別するのに使います。
なので、8行目は「セルの値が数値なら」という条件式となります。
cell.value = str(cell.value)
9行目で型の変換と書き込みを行っております。
【コードの解説】
再度「セルを取得した変数.value」を書いたら、イコールを書きます。
イコールの後ろには「str()」を書き、()内には再度「セルを取得した変数.value」を書いて完了です。
右辺でセルの値を文字列(str型)に変換し、左辺のセルに再代入しています。
したがって、これで数値を文字列として書き込みすることができるわけです。
本当に型変換が行われているか、確認してみましょう。
「type」を使うことで、変数の型を確認することができます。
型変換の前後でセルの型を見てみます。
print(type(cell.value))
if isinstance(cell.value, int):
cell.value = str(cell.value)
print(type(cell.value))
変換前は「int」、変換後は「str」となっているため、型変換は成功していることがわかります。
全セルの数値を文字列として書き込み
前項ではセル1つで解説いたしましたが、すべてのセルの数値を文字列として書き込みしてみましょう。
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, int):
cell.value = str(cell.value)
wb.save('C:/Utatane/output.xlsx')
前項から変わっているのは6・7行目(セルの取得)のところです。
前項は1つのセルを取得したのに対し、今回はfor文とiter_rowsで全セルを取得しています。
for文とiter_rowsについては下記記事をご参考ください。
実行前のデータが下図です。
数値があったり、文字列があったり不揃いですが、大丈夫です。
実行してみましょう。
すべて文字列として書き込みされました。
うまく動作しない場合の対処法
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlでセル内の数値を文字列として取得・書き込みする方法を解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!