[excel - python - uipath] 엑셀 자동화에 대해서 알아보자(2-2)

루까까·2023년 7월 14일
0

Excel 자동화

목록 보기
4/25

이번 시간에는 저번시간에 설명한 Append Range와 Append Range Workbook를 python으로 구현해 보는 시간을 가져보자!

1. Append Range

Append Range Activity를 코드로 구현했을 경우 다음과 같다.

def append_range(save_file_name: str, save_sheet_name: str | int, read_file_name: str, read_sheet_name: str | int, headers: bool = False):

    wb1 = load_workbook(save_file_name, data_only=False)
    ws1 = wb1[save_sheet_name]

    wb2 = load_workbook(read_file_name, data_only=False)
    ws2 = wb2[read_sheet_name]

    # 워크시트에서 셀 값을 추출하여 리스트로 저장
    data = []
    if headers:
        min = 1
    else:
        min = 2
    for row in ws2.iter_rows(min_row = min, values_only=True):
        data.append(row)

    # 데이터프레임 생성
    df = pd.DataFrame(data)

    for row in dataframe_to_rows(df, index=False, header=False):
        ws1.append(row)

    wb1.save(save_file_name)

코드 설명

wb1 = load_workbook(save_file_name, data_only=False)
ws1 = wb1[save_sheet_name]

1-1 . data를 append할 Excel Sheet를 지정한다.(원본 파일)

wb2 = load_workbook(read_file_name, data_only=False)
ws2 = wb2[read_sheet_name]

data = []
if headers:
	min = 1
else:
    min = 2
for row in ws2.iter_rows(min_row = min, values_only=True):
    data.append(row)
df = pd.DataFrame(data)

1-2. append하고 싶은 데이터를 지정해주는 부분이다. 어떤 Excel파일 Sheet에서 데이터를 가져오는지 지정해주고 해당 데이터를 DataFrame(일명 df)로 변환하는 과정이다.

  • headers의 경우 해당 데이터를 가져오는데 컬럼명(일명, 머리글)을 가져올지 가져오지 않을지 선택하는 인수이다.
    • headers가 True값이면 컬럼명을 가져온다.
    • headers가 False값이면 컬럼명을 가져오지 않는다.
    • 기본 값은 False이다.
for row in dataframe_to_rows(df, index=False, header=False):
        ws1.append(row)

wb1.save(save_file_name)

1-3. df화 시킨 데이터를 원본 Excel Sheet에 append하는 과정이다. 데이터를 append한 후, 저장한다.

Append Range에 대해서 알아보았다. 다음 순서로는 Append Range Workbook에 대해서 알아보자.

2. Append Range Workbook

Append Range Workbook Activity를 코드로 구현했을 경우 다음과 같다.

def append_range_workbook(file_name: str, sheet_name: str | int, df):

    wb = load_workbook(file_name, data_only=False)
    ws = wb[sheet_name]


    for row in dataframe_to_rows(df, index=False, header=False):
        ws.append(row)

    wb.save(file_name)

Append Range코드와는 다르게 매우 간단하게 구현되어 있다.
앞선 코드의 경우 읽어줄 Excel 파일을 두개 지정하고 그 중 하나를 df화 시켜야 했지만,
Append Range Workbook의 경우 처음부터 df를 인수로 받기에 df화 하는 과정이 삭제되었다.(따라서 파일 또한 하나만 호출한다.)

profile
기타치는 개발자

0개의 댓글