이번 시간에는 Find/Replace Value activity를 python 코드로 구현해보는 시간을 가져보자.
(uipath Find/Replace Value activity 알아보기)
def find_replace_value(file_name: str, sheet_name: [str, int], find_values= [str, int],
replace_values: [str, int] = None) -> list:
wb = load_workbook(file_name)
ws = wb[sheet_name]
data = []
for row in ws.iter_rows(values_only=True):
data.append(row)
df = pd.DataFrame(data[1:], columns=data[0])
indices = np.where(df.values == find_values)
rows, cols = indices[0], indices[1]
result_list = []
n = 0
for row in rows:
row = int(row) + 2
col = cols[n]
col = int(col) + 1
result_list.append(get_column_letter(col)+str(row))
n += 1
if replace_values is not None:
for i in result_list:
ws[i].value = replace_values
wb.save(file_name)
return result_list
def find_replace_value(file_name: str, sheet_name: [str, int], find_values= [str, int],
replace_values: [str, int] = None) -> list:
wb = load_workbook(file_name)
ws = wb[sheet_name]
data = []
for row in ws.iter_rows(values_only=True):
data.append(row)
df = pd.DataFrame(data[1:], columns=data[0])
indices = np.where(df.values == find_values)
rows, cols = indices[0], indices[1]
result_list = []
n = 0
for row in rows:
row = int(row) + 2
col = cols[n]
col = int(col) + 1
result_list.append(get_column_letter(col)+str(row))
n += 1
if replace_values is not None:
for i in result_list:
ws[i].value = replace_values
wb.save(file_name)
return result_list
여담
기존 uipath의 경우 수식을 찾거나 변경하는 것을 지원하지 않았다.하지만 python의 경우 openpyxl을 활용하였기에 수식값을 읽을 수 있어 수식을 찾거나 변경하는 것이 가능하다.
하지만 단점으로는 수식값이 아닌 수식이 보여지는 값으로 찾을 수가 없다는 단점이 존재한다.
여담2
uipath의 경우 세가지 기능을 지원하였는데
1. 찾기
2. 바꾸기
3. 모두 바꾸기
이지만 현재 필자가 만든 기능을 1,3기능을 지원한다.