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


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

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

【Python】openpyxlの「offset」でエクセルのセルの周辺データを取得するプログラム

2020年3月1日

「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


関連記事


コメントを残す

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

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

ABOUTこの記事をかいた人

blank

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