【Python】openpyxlを利用したエクセルのセルとシートの範囲指定で読み取りと書き込み


Pythonで「openpyxl」ライブラリを利用して、エクセルの「セル」の範囲指定をしたデータの読み取りと書き込みをまとめました。

なかなか、ネットに情報が乗っていないので、私が動作確認できた範囲指定のコードを紹介します。


「openpyxl」ライブラリを利用してエクセルの範囲指定とデータの「読み取り」と「書き込み」プログラム

エクセルの範囲指定を利用した読み取り、書き込みは「openpyxl」ライブラリを使用します。

今回は、エクセルのデータからから範囲指定でデータを読み取り、別シートの指定位置に貼り付けるプログラムとなります。

※ for_test00.py

import openpyxl

wb =openpyxl.load_workbook('excel-data_find.xlsx')
wb.create_sheet('interface')

sheet = wb.get_sheet_by_name('Sheet1')
sheet2 = wb.get_sheet_by_name('interface')

for i in range(1,10):
#コピー元の列を読み取り
    copy = sheet.cell(row = i, column = 4).value
#Valueに指定した値を指定先の列に書き込む
    sheet2.cell(row = i, column = 6, value = copy)

    i += 1

wb.save('data.xlsx')

print('別シート「interface」への出力完了')
  • 3行目:該当のエクセルファイルの読み取り
  • 4行目:新規に「interface」と言う名前のシートを作成
  • 6、7行目:シートの読み取り
  • 9行目:for文開始。range関数1行目〜9行目を指定
  • 11行目:4列目の1〜9行目までのデータをコピー
  • 13行目:6列目の1〜9行目まにコピーしたデータを貼り付け
  • 15行目:forで毎回1行ごとに繰り返し処理

書き込みする際に開始する行を変更する場合のコード

以下では書き込み先のエクセルシートを範囲指定して書き込みをしたい際に実施するコードとなります。
今回はコピしたデータを書き込み先のセル「G列の11行目から19行目」までに書き込みするように、関数「i」に「+10」をつけることで11行目から書き込みを開始するようになります。

import openpyxl

wb =openpyxl.load_workbook('excel-data_find.xlsx')
wb.create_sheet('interface')

sheet = wb.get_sheet_by_name('Sheet1')
sheet2 = wb.get_sheet_by_name('interface')

for i in range(1,10):
    sheet2['G5'] = 'テスト'
#コピー元の列を読み取り
    copy = sheet.cell(row = i, column = 4).value
#Valueに指定した値を指定先の列に書き込む
    sheet2.cell(row = i+10, column = 7, value = copy)

    i += 1

wb.save('data.xlsx')

print('別シートへの出力完了')
  • 3行目:該当のエクセルファイルの読み取り
  • 4行目:新規に「interface」と言う名前のシートを作成
  • 6、7行目:シートの読み取り
  • 9行目:for文開始。range関数1行目〜9行目を指定
  • 10行目:セル「G5」へ「テスト」と言う文字列データを書き込み
  • 12行目:4列目の1〜9行目までのデータをコピー
  • 14行目:6列目の11〜19行目まにコピーしたデータを貼り付け
  • 16行目:forで毎回1行ごとに繰り返し処理

※ 実行結果

PS C:> python for_test00.py
.for_test02.py:6: DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
  sheet = wb.get_sheet_by_name('Sheet1')
.for_test02.py:7: DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
  sheet2 = wb.get_sheet_by_name('interface')
別シートへの出力完了
PS C:> 

エクセルシートで正常に読み込み、書き込みができたことを確認

正常にプログラムが実行できた際は以下のようになります。

読み込み先のデータは以下となります。
ここから、4列目(D列)の1行目〜9行目をコピーします。

コピーしたデータを、7行目(G列)の11行目〜19行目に書き込みをします。

これで範囲指定で任意のシートセルへの読み込み書き込みをすることが可能となります。

前回、指定の文字列のデータを抽出するプログラムも書いているので参考にしてください。

【Python】pandasを利用したエクセルで文字列を「行」で検索読み取りとデータ書き込みまで

2020年2月15日

openpyxlは今回のような範囲指定では使いやすいライブラリとなるので活用しましょう。


関連記事


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUTこの記事をかいた人

blank

インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!