IQ Botを使って、空欄行を埋めるやりかたを解説します。
##イメージ
##やりかた
テーブルに対するカスタムロジックを使って、以下のように処理します。
# 値を保存する変数: table_values
#表の操作をするときに必ず入れるコード(最初)
import pandas as pd
df = pd.DataFrame(table_values)
#############################################
# ↓↓↓ ここからが今回の処理 ↓↓↓
#############################################
#日付の空欄埋め
vDate = ""
for i in range(len(df)):
if df.at[str(i),"日付"] != "":
vDate = df.at[str(i),"日付"]
else:
df.at[str(i),"日付"] = vDate
#伝票番号の空欄埋め
vDenpyoNo = ""
for i in range(len(df)):
#df.at[str(i),"伝票番号"] = "aaa"
if df.at[str(i),"伝票番号"] != "":
vDenpyoNo = df.at[str(i),"伝票番号"]
else:
df.at[str(i),"伝票番号"] = vDenpyoNo
#############################################
# ↑↑↑ ここまでが今回の処理 ↑↑↑
#############################################
#表の操作をするときに必ず入れるコード(最後)
table_values = df.to_dict()
##解説
上記のカスタムロジックを読んで、何をやっているか想像がついた方は、解説は読み飛ばしてOKです。
###処理のポイント
上記の日付、伝票番号とも、処理の仕組みとしてはまったく同じことをやっています。
日付なら日付、伝票番号なら伝票番号の列を1行ずつ読んでいき、値が入っていればそれを変数に格納し、空欄であれば変数の値を代入するという処理です。
#日付の空欄埋め
vDate = "" # 変数の初期化
for i in range(len(df)): # 抽出結果のテーブルを1行1行処理する(処理中の行をi番目とする)
if df.at[str(i),"日付"] != "": # i番目の行の日付欄の値が空欄でなかったら(★)
vDate = df.at[str(i),"日付"] # → 変数に日付欄の値を入れる
else: # ★以外の場合(=i番目の行の日付欄の値が空欄だったら)
df.at[str(i),"日付"] = vDate # → 変数の値で日付欄を埋める
###応用ポイント
上記のロジックを自分の業務に当てはめて応用したい場合、基本的に変える部分はdf.at[str(i),"日付"]
の中の"日付"の部分だけでOKです。
この部分を、自分が処理したいIQ Botのテーブル項目名に変えます。
IQ Botの項目名にスペースが含まれている場合は、スペース部分はアンダースコア(_)に置き換えます。
「伝票番号」という項目に対して処理したい場合はdf.at[str(i),"伝票番号"]
に、
「明細 消費税」という項目に対して処理したい場合はdf.at[str(i),"明細_消費税"]
に変えるという要領です。
上記の例のvDate
やvDenpyoNo
はただの変数名なので変えなくても動きますが、見た目のわかりやすさを考えると、しかるべき名前に変えておいた方がいいでしょう(消費税欄ならvTaxなど)。