【Python】openpyxlでrangeとoffsetで抽出したデータをエクセルへ書き込み

前回、Pythonでエクセル内のデータから文字列のセルと周辺のデータを「offset」で出力しました。

今回は抽出したデータを別のエクセルの指定のシートとセルに書き込むプログラムを作成したのでまとめます。

openpyxlで抽出したデータを別のエクセルの指定の位置に書き込む

前回同様、以下のNW機器から抽出したコンフィグを以下のエクセルシートに書き込んだ後、そこから指定の文字列を抽出し、さらに周辺のセルのデータも一緒に抽出し、別のエクセルシートに書き込みます。

以下が作成したプログラムとなります。

エクセルへのデータ書き込み作成コード

データ取得先のエクセルから、指定の文字列とその隣のデータを抽出し、別のエクセルシートへの作成するコードとなります。

※ parameter_06.py

import openpyxl as px

# データを抽出するファイルを読み取り
wb = px.load_workbook('excel-data.xlsx')

# データを書き込む先のファイルを作成
wb2 = px.Workbook('data.xlsx')
ws2 = wb2.create_sheet(title='interface')
wb2.save('data.xlsx')

# データを抽出するファイル、書き込み先のファイルを読み込み
wb2 = px.load_workbook('data.xlsx')
ws = wb["Sheet1"]  # 入力のシート
ws2 = wb2["interface"]  # 出力先のシート


# データ書き込み先の開始行
start_row = 3
row_num = start_row

offset = 1

# interfaceの文字列が表示されているデータを取得
for i in range(1,200):
    copy1 = ws.cell(row = i, column = 2).value, ws.cell(row = i, column = 2 + offset).value
    print(copy1)

# 「interface」の文字列がある行と右隣りの行を張り付ける
    for g in range(1,2):
        if 'interface' in copy1:
            ws2.cell(row_num, column=g+1).value = copy1[0]
            ws2.cell(row_num, column=g+2).value = copy1[1]
            row_num += 1

# ファイルを保存      
wb2.save('data.xlsx')
# ロードしたExcelファイルを閉じる
wb.close()
wb2.close()
  • 18-19行目:データ書き込み先の開始行の設定(ここでは3列目に書き込み)
  • 21行目:offsetで取得したデータの右隣りのセルのデータを出力するので「1」を設定
  • 24-26行目:指定の範囲内でデータを取得
  • 29-33行目:取得したデータから「interface」の文字列のセルの取得とその右隣りのセルのデータを指定の範囲に張り付ける

書き込みプログラム実行

以下でプログラムを実行します。

PS C:> python parameter_06.py  

実行した結果、指定の位置から抽出したデータをセルに書き込むことができました。

文字列取得とoffsetを利用したデータの抽出と別のエクセルへの書き込みは以上となります。




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。



コメントを残す

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

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

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