82812


現在、pythonを用いて自作ウェブアプリのフォームにエクセルに入っているデータを自動入力するツールを開発しています。しかし、エクセルの行が移動されず、同じところばかりコピペされている状態です。それを正しく一段ずつ下に降り、コピペされるように変えたいです。以下、コードです。

[code]

    from selenium import webdriver
    import selenium
    import time
    
    import openpyxl
    
    
    #エクセルファイル、シートの読み込み
    file = input("ファイルを入力してください:")
    sheet = input("ワークシートを入力してください:")
    
    #ページに遷移済み
    
    
    def back():
    """入力ページに戻る関数"""
        SKIP_URL ="URL"
        driver.get(SKIP_URL)
        time.sleep(1)
    
    def create_data_list():
    """シートを読み込み、一行ごとのデータリストを作成します。"""
        wb = openpyxl.load_workbook(file, data_only=True)
        ws = wb[sheet]
    
        data_list = []
        header_cells = ws[1]
    
        for row in ws.iter_rows(min_row=2, max_row=ws.max_row):
            row_dic = dict([(k.value, v.value) for k, v in zip(header_cells, row)])
            data_list.append(row_dic)
            return data_list
    
    #ここから指定した回数（ここでは100回）をループで行います。
    #入力ページ遷移→データ生成→入力→ページ遷移をループします。
    for i in range(100):  
        back()
        data_list = create_data_list()
        time.sleep(1)
    
        for data in data_list:
    """データリストから４つのデータを取り出します。"""
            v_excel_title = data['title']
            v_excel_lead = data['lead']
            v_excel_author = data['author']
            v_excel_url = data['url'] 
    
            v_title = driver.find_element_by_id('id_title').send_keys(v_excel_title)
            v_c_title = driver.find_element_by_id('id_content_title').send_keys(v_excel_title)
            v_lead = driver.find_element_by_id('id_heading').send_keys(v_excel_lead)
            v_url = driver.find_element_by_id('id_content_url').send_keys(v_excel_url)
            v_author = driver.find_element_by_id('id_creator').send_keys(v_excel_author)
    
        time.sleep(1)
    
        #保存します。
        save_draft = driver.find_element_by_css_selector("button.action-save.button-longrunning")
        save_draft.click()
    
    
[/code]

以上のコードではセルが移動しないこと以外、正常に作動します。  
つまり分けられたデータ（同じデータですが）を100回ループして、入力して保存されます。  
あとは次の行、次の行と進むだけです。

ただ、検索してもどう改善すればよいのかわからず、困っています。  
ぜひお力をお貸しください。お願いいたします。


CC BY-SA 4.0
2021-10-01T16:06:21.223
82811
2021-10-01T16:44:14.817
48024
question
python
pythonでエクセルの行を移動しながら、データを取得したい。


私:

> 少し確認させていただきたいことがあるのですが、100回ループしているのはデータが100行あるから、ですか？

Kazuhiroさん:

> そうです。その認識でまちがいありません。

そうなりますと、最後のループは以下の様になるのではないでしょうか。

[code]

    data_list = create_data_list()
    for data in data_list:
        back()
        time.sleep(1)
    
        """データリストから４つのデータを取り出します。"""
        v_excel_title = data['title']
        v_excel_lead = data['lead']
        v_excel_author = data['author']
        v_excel_url = data['url'] 
    
        v_title = driver.find_element_by_id('id_title').send_keys(v_excel_title)
        v_c_title = driver.find_element_by_id('id_content_title').send_keys(v_excel_title)
        v_lead = driver.find_element_by_id('id_heading').send_keys(v_excel_lead)
        v_url = driver.find_element_by_id('id_content_url').send_keys(v_excel_url)
        v_author = driver.find_element_by_id('id_creator').send_keys(v_excel_author)
    
        time.sleep(1)
    
        #保存します。
        save_draft = driver.find_element_by_css_selector("button.action-save.button-longrunning")
        save_draft.click()
    
[/code]


CC BY-SA 4.0
2021-10-01T16:44:14.817
82812
2021-10-01T16:44:14.817
47127
82811
answer