Jupyter notebook(Python3)を使ってみようと思っても慣れていないうちは、どうしても処理に躓いてしまうものです。
例えば、Pythonのopenpyxlにてエクセルファイルのセルのデータを取得、コピー後にペーストしたいケースがありますが、どのように処理すればいいのか理解していますか。
ここでは、このpython(openpyxl)にてエクセルファイル中のセルや列や行、範囲指定したコピー&ペーストする方法について解説していきます。
Python(opnepyxl)にてセルのコピー&ペーストを行う方法
それでは、以下のようなエクセルファイルの中のセル情報を別のセルに指定してコピー&ペーストを行う方法を確認していきます。
openpyxlにてセルのコピーを行う際には、以下のようなコードを入れます。
これで、A3の数値をD1セルにコピー&ペーストできるのです。
一連の流れを踏まえたサンプルコードは以下の通りです。
os.chdir(“C:\\sample5”)
import openpyxl as px
wb = px.load_workbook(‘a.xlsx’)
ws = wb[“a”]
ws[“D1”] = ws[“A3”].value
wb.save(filename = ‘copy.xlsx’)
コードを詳しく説明しますと、
import os
os.chdir(“C:\\sample5”)でコピー&ペーストをしたいエクセルファイルがあるディレクトリに移動します。
続いて、
import openpyxl as px
wb = px.load_workbook(‘a.xlsx’)
でopenpyxl をpxとしてインポートし、wbとしてエクセルファイルaを開きます。
さらには、
ws = wb[“a”]
ws[“D1”] = ws[“A3”].valueでaというファイルの中のシートaをwsとして読み込み、その中のA3セルの数値をコピーし、D1にペースト(張りつけ)しているのです。
最後に
wb.save(filename = ‘copy.xlsx’)
というこのコードでcopyというエクセルファイル名を指定して保存完了となります。
列と数値の番号を指定してセルのコピー&ペーストを行う【openpyxl】
なおA1やD1という表記ではループ処理を行いにくく、大量の処理には奮起です。そのため、私は以下のよう、行番号と列番号を指定してセルのコピー&ペーストを行う場合が多いので、こちらで覚えておくのがおすすめです。
os.chdir(“C:\\sample5”)
import openpyxl as px
wb = px.load_workbook(‘a.xlsx’)
ws = wb[“a”]
ws.cell(row = 4, column =3).value = ws.cell(row = 2, column =1).value
wb.save(filename = ‘copy2.xlsx’)
まず、
ws.cell(row=行番号,column=列番号)
としてコピーするセルの取得や、ペーストするセルの指定を行っています。
そして
ws.cell(row = 4, column =3).value = ws.cell(row = 2, column =1).value
にて、1列2行目のセル(A2)の数値のコピーを行い、3列4行目(C4)にペーストしています
その2:列と数値の番号を指定してセルのコピー&ペーストを行う【openpyxl】
なお、以下のようにcopyという名前で指定したものをペーストするセルの引数にいれこむ方法もあります。こちらもイメージしやすいので私はよく使用します。
os.chdir(“C:\\sample5”)
import openpyxl as px
wb = px.load_workbook(‘a.xlsx’)
ws = wb[“a”]copy = ws.cell(row = 3, column =1).value
ws.cell(row =4, column =7 , value = copy)
wb.save(filename = ‘copy3.xlsx’)
ポイントとしては、
copy = ws.cell(row = 3, column =1).value
ws.cell(row =4, column =7 , value = copy)ここで、1列目の3行目の情報を7列目の4行目にコピーしていることを理解していましょう。
Openpyxlでシートをまたいだり別のブックにセルのコピー&ペーストを行う【Python】
今度はpython(opnepyxl)にてシートやブックをまたいだセルのコピー&ペーストの方法を解説していきます。
まずは、ブックは同じでシートをまたいだコピー&ペーストの方法を確認します。
os.chdir(“C:\\sample5”)
import openpyxl as px
wb = px.load_workbook(‘a.xlsx’)
ws = wb[“a”]
ws2 = wb[“b”]
copy = ws.cell(row = 3, column =1).value
ws2.cell(row =4, column =7 , value = copy)
wb.save(filename = ‘copy4.xlsx’)
とすると、aというエクセルファイルの中の、wsと定義したaというシートの3行1列目の情報をコピーし、ws2と定義したbというシートの4行7列目にコピーしていることになります。
ブックをまたいでセルのコピペを行う【openpyxl】
別のブックにセル情報のcopyと貼り付けを行う場合でも基本的には処理方法は同じといえます。定義の段階で少しいじるといいです。
os.chdir(“C:\\sample5”)
import openpyxl as px
wb = px.load_workbook(‘a.xlsx’)
ws = wb[“a”] wb2 = px.load_workbook(‘b.xlsx’)
ws2 = wb2[“b”] copy = ws.cell(row = 3, column =1).value
ws2.cell(row =4, column =7 , value = copy)
wb2.save(filename = ‘copy4.xlsx’)
つまりは、aというブックだけでなく、bというブックも読み込んで各々のシートを開き、そのシート間をまたいだセルのコピペを行うことで、別ブックへの貼り付けを行っています。
Pythin(Openpyxl)でセルの範囲を指定して、セルのコピー&ペーストを行う
Opnepyxlにてセルの範囲を指定してコピー&ペーストを実行するためには、セルの行列番号に変数を入れ、for分でループ処理するといいです。
os.chdir(“C:\\sample5”)
import openpyxl as px
wb = px.load_workbook(‘a.xlsx’)
ws = wb[“a”]
wb2 = px.load_workbook(‘b.xlsx’)
ws2 = wb2[“b”]
for i in range(1,13):
for j in range(1,3):
copy = ws.cell(row = i, column =j).value
ws2.cell(row = i, column =j , value = copy)
wb2.save(filename = ‘copy4.xlsx’)
こでは、列方向の範囲を1~13未満、行方向の範囲を1~3未満と指定したコピー&ペーストができます。
なお、指定前や指定後の変数に+xとすればセルの移動ができ、*yなどとすれば列飛ばしでのコピー、貼り付けができることも理解しておくといいです。
まとめ Python(openpyxl)にてコピーしてペーストを行う方法【セル単体や範囲指定(excel)】
ここでは、Python(openpyxl)にてコピーしてペーストを行う方法【セル単体や範囲指定(excel)】
について解説しました。
Openpyxlに関する情報は今のところそこまでネット上に上がっていないため、当サイトの情報を活用していただければ幸いです。
Pythonでの各種処理方法に慣れ、より効率的なデータ解析を行っていきましょう。
コメント