91871


### やりたいこと

Excelからデータを読み込みB列空白の場合だけデータを選択して  
ブラウザで検索したいです。

現在下記のコードで、処理可能ですが  
最初の行が読み込んでしまうので、すべて１行目から国が検索されます。  
直前にB列が空白の場合、Japan、Brazilのデータから検索したいです。

**Excelのデータ:**

[code]

    Country Flag      
    America OK
    Japan   
    Argentina OK
    Brazil  
    
[/code]

**実現したい内容**

[code]

    pandasのように列を指定して直前にフィルターをしたいです。
    
    #OKからフィルター外す
     df =df[df["Flag"] != "OK"]
     #print(df)
    
    もしくはB列を空白選択
    
    #空白のみを選択
      df= df[df['Flag'].isnull()]
    
[/code]

**Excelのフィルター:**

[code]

    Country Flag      
    Japan   
    Brazil  
    
[/code]

**Excelの結果:**

[code]

    Country Flag      
    America OK
    Japan   OK
    Argentina OK
    Brazil  OK
    
[/code]

コード

[code]

    import openpyxl 
    import time
    from selenium import webdriver
    from webdriver_manager.chrome import ChromeDriverManager
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.chrome.options import Options
    from selenium.common.exceptions import NoSuchElementException
    
    #エクセル読み込み
    file_excel_r=r"C:\Users\test\Documents\test\test.xlsx"
    
    #エクセルファイルを読み込み
    wb = openpyxl.load_workbook(file_excel_r)
    ws = wb["Sheet1"]
    
    #1行ずつ読み込み
    #2行目からループを行う
    for i in range(2,ws.max_row+1):
     
     options = Options()
     options.add_argument('--headless') 
     options.add_argument('--no-sandbox')
     options.add_argument('--disable-gpu')
         
     driver = webdriver.Chrome(executable_path=ChromeDriverManager().install())
    
     #country
     country = ws['a'+str(i)].value
    
     #flag
     flag = ws['b'+str(i)].value
    
     #url指定
     url = "https://www.google.com/search?q="+country
     print(url)
     
     #検索サイトを開く
     driver.get(url)
     
     #2秒待機
     time.sleep(2)
    
     #B列が空白であればOKを記載
     if flag is None or not str(flag).strip():
            ws['B'+str(i)].value = "OK"
     else:
           print('空白なし')
    
     #エクセル保存
     wb.save(file_excel_r)
    
     driver.quit()
    
    
[/code]

どのようにopenpyxlを使って、フィルターすれば良いでしょうか。  
ご教授の程お願いします。


CC BY-SA 4.0
2022-10-27T04:22:00.857
91851
2022-10-28T02:45:14.737
2022-10-27T07:26:12.210
18859
18859
question
python python3 openpyxl
openpyxlを使って、フィルターをしたい


openpyxlには`pandas`のように柔軟な列フィルタで対象を抽出する機能はありません。  
Excelのようにフィルタで[非表示設定](https://www.dfour.net/python-
openpyxl-3/)にすることはできますが、お求めの機能ではないと予想します。  
フィルタではなくif文での条件分岐のご利用を検討ください。

すべての国が検索される原因は、条件分岐せずに必ず`driver.get(url)`を呼び出していることです。  
`#B列が空白であればOKを記載`するif文で既にお求めの条件分岐していますので、左記のif文の条件に合えば`#検索サイトを開`かないようコードを書き換えることで目的を達成できるかと存じます。


CC BY-SA 4.0
2022-10-28T01:12:40.150
91871
2022-10-28T02:45:14.737
2022-10-28T02:45:14.737
9820
9820
91851
answer