【Python】openpyxlの「offset」を利用したエクセルでコピー・書き込みする方法

Pythonを使ったエクセルシートへのコピー・書き込みですが、対象の文字列を抽出して、その文字列周辺のセルデータを取得し、別シートのセルに書き込むプログラムを作成しました。

前回、セル周辺のデータを出力するプログラムの続きとなります。

「openpyxl」でセル周辺のデータを抽出・コピーし書き込む方法

今回は以下のエクセルシートから「interface」という文字列を抽出し、その右隣りのデータを「offset」で抽出し、別シートに書き込むプログラムとなります。

以下では、データを読み取るエクセルシートと、新規でデータを書き込むエクセルシートを作成し、抽出データを書き込みます。

※ parameter_05_ok.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"]  # 入力のシート

MIN_COL = 2
MIN_ROW = 2

MAX_COL = 2
MAX_ROW = 180


# 範囲データを順次処理
for row in ws.iter_rows(min_col=MIN_COL, min_row=MIN_ROW, max_col=MAX_COL, max_row=MAX_ROW):
    for cell in row:
        # 該当セルの値取得
        cell_value = cell.value
        o = cell.offset(0,1)
        offset = o.value
        
        
        # 該当セルに値が存在する場合表示
        if 'interface' in cell_value:
            print(cell.coordinate, cell_value, offset)

            ws2.append({'C': cell_value, 'D': offset})

wb2.save('data.xlsx')
# ロードしたExcelファイルを閉じる
wb.close()
wb2.close()
  • 5-7行目:新規でエクセルファイルとシートを作成し保存
  • 13-17行目:読み取りをするセルの範囲を指定(今回は’interface’という文字列を抽出する範囲指定)
  • 21-24行目:範囲指定した値の取得
  • 25-26行目:指定範囲の値の右隣りの値を「offset」で取得
  • 29-32行目:「interface」という文字列を出力。また、右隣りのセルデータも出力。さらに別のエクセルシートに出力結果を書き込む
  • 34行目:書き込んだファイルを保

実行結果

上記で作成したプログラムの実行結果は以下となります。

ちょっと行が長いので一部抜粋

PS C:> python .parameter_05_ok.py
....
B63 interface Ethernet1/1
B64 interface Ethernet1/2
B65 interface Ethernet1/3
B66 interface Ethernet1/4
B67 interface Ethernet1/5
B68 interface Ethernet1/6
B69 interface Ethernet1/7
B70 interface Ethernet1/8
B71 interface Ethernet1/9
B72 interface Ethernet1/10
B73 interface Ethernet1/11
B74 interface Ethernet1/12
.....
PS C:> 

別ファイルのエクセルシートに抽出したデータが書き込まれています。

課題

別のエクセルシートへの書き込みはできましたが、書き込みを開始するセルの指定ができていません。
この課題をクリアすれば、うまいことパラメータシートを作成することができるんですけどね。

一人でのプログラミングは大変ですねw




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

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

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

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



コメントを残す

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

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

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