80649


### やりたいこと

Excelからデータを読み込み空白のセル(管理番号)を判定させて  
空白の場合、A列の管理番号を次の行に代入して貼り付ける。

**Excelのデータ:**

[code]

    管理番号         申込電話番号    電話番号情報
    96103212345       0344123902      無
                      0344123903      無
                      0344123904      無
                      0344123905      無
    96103212346       0344123906      無
                      0344123907      無
                      0344123908      無
    96103212347       0344123909      無
    96103212348       0344123910      無 
    
[/code]

**現在の結果空白を削除されます。:**

[code]

    ['96103212345', '0354379020', '無']
    ['96103212346', '0344123906', '無']
    ['96103212347', '0344123909', '無']
    ['96103212348', '0344123910', '無']
    
[/code]

コード

[code]

    # Excel用ライブラリ読込
    import openpyxl
    
    # Excelファイルを開く
    v_wb=openpyxl.load_workbook("test.xlsx")
    
    # アクティブなシートを変数へ
    v_ws = v_wb.active
    print(v_ws)
    
    # 空白文字を判定⇒参考https://gammasoft.jp/support/openpyxl-iter-rows/
    for row in v_ws.iter_rows(min_row=2):
        if row[0].value is None:
            continue
        values = []
        for col in row:
            values.append(col.value)
        print(values)
    
    
    
[/code]

わかる方いらっしゃいましたらご教示願います。

お手数ですが、宜しくお願いいたします。


CC BY-SA 4.0
2021-08-06T05:29:34.980
80633
2022-10-27T02:30:46.813
2022-10-27T02:30:46.813
18859
18859
question
python python3 excel openpyxl
openpyxlを使った空白の判定


空白判定の参考記事の「先頭カラムが空欄でない行だけ読み取る」処理を何も変更せずにコピーしているようですが、これだと空欄のある行をスキップして表示するだけで、しかもexcelデータには何も反映されないままですね。  
参考記事および実現したい内容の両方が上手く整理されていないために理解し切れていないのでしょう。

おそらく以下の内容のシートが：

[code]

    申込書管理番号      申込電話番号    電話番号情報
    96103212345       0344123902      無
                      0344123903      無
                      0344123904      無
                      0344123905      無
    96103212346       0344123906      無
                      0344123907      無
                      0344123908      無
    96103212347       0344123909      無
    96103212348       0344123910      無
    
[/code]

こちらのように空欄に直前の値が補完されれば良いのでは？

[code]

    申込書管理番号      申込電話番号    電話番号情報
    96103212345       0344123902      無
    96103212345       0344123903      無
    96103212345       0344123904      無
    96103212345       0344123905      無
    96103212346       0344123906      無
    96103212346       0344123907      無
    96103212346       0344123908      無
    96103212347       0344123909      無
    96103212348       0344123910      無
    
[/code]

なので申込書管理番号のためにentrynumberといった変数を用意し、空欄だったらそれを代入する・空欄でなかったらそれでentrynumberを入れ替える、という処理にすれば良いでしょう。  
参考記事からコピーしたここの部分を：

[code]

    for row in v_ws.iter_rows(min_row=2):
        if row[0].value is None:
            continue
        values = []
        for col in row:
            values.append(col.value)
        print(values)
    
[/code]

こちらのようにしてみてください。  
ifの条件を増やしたのは、参考記事の空白文字が入っていた場合を反映したものです。

[code]

    entrynumber = ''
    for i in range(2,v_ws.max_row+1):
        if v_ws['a'+str(i)].value is None or not str(v_ws['a'+str(i)].value).strip():
            v_ws['a'+str(i)].value = entrynumber
        else:
            entrynumber = v_ws['a'+str(i)].value
    
[/code]

* * *

あるいは、その申込書管理番号部分のexcelのデータを書き変えたくないなら、交通費検索ループの処理を変えるのが良いでしょう。  
こちらの部分を：

[code]

    for i in range(2,v_ws.max_row+1):
    
        # 申込書管理番号
        a = v_ws['a'+str(i)].value
    
        # 申込電話番号
        b = v_ws['b'+str(i)].value
    
[/code]

このように変えてみてはどうでしょう。

[code]

    entrynumber = ''
    for i in range(2,v_ws.max_row+1):
    
        # 申込書管理番号
        a = v_ws['a'+str(i)].value
    
        if a is None or not str(a).strip():
            a = entrynumber
        else:
            entrynumber = a
    
        # 申込電話番号
        b = v_ws['b'+str(i)].value
    
[/code]


CC BY-SA 4.0
2021-08-06T23:57:24.477
80649
2021-08-07T00:45:31.940
2021-08-07T00:45:31.940
26370
26370
80633
answer