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


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

【Python】openpyxlでrangeとoffsetを利用した出力プログラム

2020年3月7日

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


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を利用したデータの抽出と別のエクセルへの書き込みは以上となります。


関連記事


コメントを残す

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

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

ABOUTこの記事をかいた人

blank

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