openpyxlでエクセルファイルを操作しているんだけど、
「B2セル」の内容を切り取りして「E4セル」に貼り付けしたい…。
なるほど…。
では今回は、「セルの値・書式を切り取り・貼り付けする方法」を
できるだけわかりやすく解説いたします。
記事の後半では「別のシートや別のブックに貼り付けする方法」
も解説いたしますので、ぜひ最後まで読んでいってください。
openpyxlでセルの値・書式を切り取り・貼り付けする方法
「move_range」を使います。まずは全コードと実行結果をお見せします。
解説は後ほど行います。
全コード
import openpyxl
wb = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws = wb['Sheet1']
ws.move_range('B2', rows = 2, cols = 3)
wb.save('C://Utatane/output.xlsx')
ws.move_range('B2', rows = 2, cols = 3)
実行結果
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、既存ファイルを開いて保存する方法など、基本解説も行っておりますのでご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
ws.move_range('B2', rows = 2, cols = 3)
上記コードにて、セルの値や書式を切り取り、貼り付けすることができます。
今回は「B2」セルを切り取り、「E4」セルに貼り付けしています。
【コード解説】
まずワークシートが入った変数を書いたら、「.move_range()」を書きます。
()内には、「切り取りするセル名」と「貼り付けする位置」を指定して完了です。
【注意点】
「切り取りするセル名」は、’B2’のように「’(クォーテーション)」で囲ってください。
囲わないと動きません。
【コード解説】
「貼り付けする位置」は切り取ったセルから縦横どれくらい移動してから貼り付けるかを指定します。
「rows」で縦方向(行方向)を指定します(今回は2行移動させるので4行目に貼り付け)
「cols」は横方向(列方向)です(今回は3列移動させるのでE列に貼り付け)
結果、「B2」から「E4」に移動したと思ってください。
1つのセルだけではなく、範囲選択したセルを切り取り・貼り付けすることもできます。
import openpyxl
wb = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws = wb['Sheet1']
ws.move_range('B2:C3', rows = 2, cols = 3)
wb.save('C://Utatane/output.xlsx')
このとき「切り取りするセル名」は’B2:C3’のように範囲を指定してください。
ここまで同一シート内での切り取り・貼り付け方法を解説いたしました。
しかしながら、別シートや別ブックへの貼り付けは、この方法が使えません。
別の方法があるのですが、次項で紹介いたします。
別シート・別ブックに切り取り・貼り付けする方法
切り取りしたセルを別シート・別ブックに貼り付けするには、
「セルの内容を取得(コピー)して別シート・別ブックに貼り付け、元のセルの内容を削除」します。
早速コードを見ていきましょう。
import openpyxl
from openpyxl.styles import PatternFill
wb_in = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws_in = wb_in['Sheet1']
wb_out = openpyxl.load_workbook('C://Utatane/output.xlsx')
ws_out = wb_out['Sheet1']
cell_in = ws_in['B2']
cell_out = ws_out['B2']
cell_out.value = cell_in.value
cell_out.fill = PatternFill(patternType=cell_in.fill.patternType, fgColor=cell_in.fill.fgColor)
cell_in.value = None
cell_in.fill = PatternFill(None)
wb_in.save('C://Utatane/input.xlsx')
wb_out.save('C://Utatane/output.xlsx')
ざっくりとですが、解説いたします。
今回は別ブックへ「セルの値」と「背景色」のみ取得・適用しています。
その他の書式も適用させたい場合は、下記記事をご参考ください。
import openpyxl
from openpyxl.styles import PatternFill
【1~2行目】インポート
openpyxlのインポートと、背景色の操作に必要なPatternFillをインポート
wb_in = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws_in = wb_in['Sheet1']
【4~8行目】ブック・シートの読み込み
切り取りする「input.xlsx」と、貼り付けする「output.xlsx」を読み込み
cell_in = ws_in['B2']
cell_out = ws_out['B2']
【10~11行目】セルの取得
切り取りするセルと貼り付けするセルを取得
cell_out.value = cell_in.value
cell_out.fill = PatternFill(patternType=cell_in.fill.patternType, fgColor=cell_in.fill.fgColor)
【13~14行目】貼り付け
セルの値と背景色を貼り付け
cell_in.value = None
cell_in.fill = PatternFill(None)
【16~17行目】元のセルを削除
元のセルの値と背景色を削除
うまく動作しない場合の対処法
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlでセルの値・書式を切り取り・貼り付けする方法を解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!