送られてきたエクセルファイルなんだけど、
セル内に改行が入っているから削除したい…。
openpyxlでセル内の改行を削除できないの?
openpyxlで改行を削除できますよ!
「セル内の改行を削除する方法」
「表全体のセル内改行を削除する方法」
上記2つを、できるだけわかりやすく解説いたします。
【著者情報】
Python歴3年。
入社2年目の春に先輩が突然トンズラし、業務を半分肩代わりするハメに…。
今までの1.5倍の仕事をこなせるはずもなく、苦しむ毎日。
業務効率化を模索中にPythonと出合う。
業務とPythonの相性が良く、2倍以上の効率化を実現。現在も効率化を進行中。
openpyxlでセル内の改行を削除するには
セル内で改行されているのは、改行コードが入っているからです。
改行コードは「\n」で、これを削除するには「replace」を使います。
まずは実行見本をどうぞ。
実行見本
全コード
ひとまず全コードを網羅します。解説は後ほど行います。
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
ws['A1'].value = ws['A1'].value.replace('\n','')
wb.save('output.xlsx')
ws['A1'].value = ws['A1'].value.replace('\n','')
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
openpyxlの基礎解説
既存ファイルを開いて保存する方法などの操作の基本解説は、下記記事で行っております。
ご参考ください。
解説:セル内の改行を削除(replaceと再代入)
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
ws['A1'].value = ws['A1'].value.replace('\n','')
上記1文にて、A1セルに入った改行を削除しています。
文字を編集する際は、「.value」を付けます。
(改行も文字の一部です)
<テンプレ>
【 ワークシート変数[‘セル名’].value = ワークシート変数[‘セル名’].value.replace(‘\n’,”) 】
replace
「replace」は文字を置き換える時に使います。
通常は「replace(‘おはよう’,’こんにちは’)」というように、
「おはよう」を「こんにちは」と置き換えるときに使います。
ところが少し小技があって、
「replace(‘おはよう’,”)」と記述することで、「おはよう」を削除できます。
今回の例では改行コードである「\n」を削除できるのです。
再代入
<テンプレ>
【 ワークシート変数[‘セル名’].value = ワークシート変数[‘セル名’].value.replace(‘\n’,”) 】
左辺と右辺の途中(黄色線の部分)までは同じです。
これは右辺で処理したものを、左辺に再代入するということです。
今回の例では「A1セルの改行を削除したもの」をA1セルに再代入しています。
「列の幅が合っていない」と気になる方は「列の幅を自動調整」してみてください。
下記記事で解説しております。
表全体のセル内改行を削除
前項で「1つのセルの改行を削除する方法」を解説いたしました。
しかしながら、「表全体の改行を削除したい」という場合もあるかと思います。
前項の応用で比較的簡単にできます。
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
for row in ws.iter_rows() :
for cell in row :
cell.value = cell.value.replace('\n','')
wb.save('output.xlsx')
6~8行目が変わっていますね。
まず、「for」や「iter_rows()」を初めて見る方は「ナンダコレ?」となっているかと思います。
下記記事でわかりやすく解説しておりますので、ご参考ください。
8行目の「cell.value = cell.value.replace(‘\n’,”)」は、
前項の「ws[‘A1’].value = ws[‘A1’].value.replace(‘\n’,”)」と同じだと思ってください。
前項は特定のセル「A1」の改行を削除したので「A1」と指定しています。
今回は「A1~E5」までのセルの改行を削除するため、指定してしまうと25個の指定が必要になります。
指定する代わりにfor文を使って表内の全セルを処理しています。
「cell」には表内の「A1~E5」全セルが次々に入って処理されますのでご安心ください。
長々と失礼いたしました。実行してみましょう。
「行の高さが合っていない」と気になる方は、「行の高さを自動調整」してみてください。
下記記事で解説しております。
うまく動作しない時
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlでセル内の改行を削除する方法を解説いたしました。
見やすくするために改行を入れたり、セルの結合を使って資料を作る人はまだまだいます。
もちろん作った人が悪いわけではありません。
受けた側が対応できるように知識を積み上げていきましょう。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!