[PythonでExcel編集] Excel内の特定の文字列を検索して行番号を取得し、任意の条件を満足する場合、その行番号に転記する方法

Python
スポンサーリンク

こんにちはーー

趣味でPythonを使ってエクセルやCSVの処理を自動化しているロペです。

今回はExcel内の特定の文字列を検索して、その行番号に転記するプログラムを作成したので記事にしました。

ググりまくってプログラムを作成しているので、誰かのブログが役に立っています。
この記事も誰かの役に立てば幸いです。

スポンサーリンク

概要

最初に、作成したプログラムで実行した内容を書きます。

baseとtest1,test2,test3を用意します。

それぞれのファイルの中身は↓のようになっています。

base

test1

test2

test3

test1~3で、a列、b列の1の数をカウントして、
1以上だったら1と転記して0だったら0と転記します。

完成例

ブログを書いているPCだとxlsxが使えず、xlsはpythonがサポートしてなかったので、
プログラムを実行できず、実行していたら↓のようになっているはずです(多分)

作成したプログラム

↓のようなプログラムを作成しました。
ブログを書いているPCだとxlsxが使えず、xlsはpythonがサポートしてなかったので、
デバッグができておらず、もしからしたらどこかでエラーでるかもしれません・・・
別PCでは意図通りに動いていたので、↓の”考え方”を見て頂ければと思います。

import os
import glob
from openpyxl import load_workbook
import pandas as pa

trgt_file = 'baese.xlsx'

wb = load_workbook(trgt_file)
ws = wb['Sheet']
max_row = ws.max_row

df_base = pd.read_excel(trgt_file)

serch_path ='./'
for f in glob.glob(serch_path+'*.xlsx'):
    serch_file_name = os.path.split(f)[1].replace('.xlsx','')
    max_row_add = ws.max_row
    print(serch_path + os.paht.split(f)[1])

    df = pd.read_excel(serch_path + os.path.split(f)[1])

    max_row2=ws.max_row
    print('max_row:'+str(max_row2))

    a_val = df.iloc[:,1]
    b_val = df.iloc[:,2]

    comf_a_val = a_val ==1
    comf_b_val = b_val ==1

    if comf_a_val.sum()>=1:
        set_a_val =1
    else:
        set_a_val =0
    print('test1のカウント結果:'+ set_a_val)
        
    if comf_b_val.sum()>1:
        set_b_val =1
    else:
        set_b_val =0
    print('test1のカウント結果:'+ set_b_val)

    for s in range(1,max_row):
        if serch_file_name in str(ws['A'].value):
            ws.cell(row=int(s),column=2).value = set_a_val
            ws.cell(row=int(s),column=3).value = set_b_val
            wb.save(trgt_file)
        break
    else:
        print(serch_file_name+'はみつかりません')

考え方

ファイル名の取得

for f in glob.glob(serch_path+'*.xlsx'):
    serch_file_name = os.path.split(f)[1].replace('.xlsx','')

glob関数で、配下のxlsxファイル名を取得します。

条件を満たす値のカウント

comf_a_val = a_val ==1
    comf_b_val = b_val ==1

    if comf_a_val.sum()>=1:
        set_a_val =1
    else:
        set_a_val =0

このプログラムで、値が1となっている行数をカウントし、1件以上あれば変数に1を設定します。
0件の場合は変数を0とします。

指定の行に値を転記する

for s in range(1,max_row):
        if serch_file_name in str(ws['A'].value):
            ws.cell(row=int(s),column=2).value = set_a_val
            ws.cell(row=int(s),column=3).value = set_b_val
            wb.save(trgt_file)
        break

for文で、行を上から順に条件を満足する文字列か確認していき、
一致した行番号を取得して、その行番と指定の列に上で定義した変数set_a_val/set_b_balの値を記載します。

値に記載は、ws.cell(row=*,column=*).valueを使用します

以上になります!!

コメント

タイトルとURLをコピーしました