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

루까까·2023년 12월 4일
0

Excel 자동화

목록 보기
24/25
post-thumbnail

이번 시간에는 Insert Column activity, Insert Rows activity activity를 python 코드로 구현해보는 시간을 가져보자.
(Insert Column activity, Insert Rows activity activity 알아보기)

Insert Column activity

1-1. 전체 코드

def insert_column(file_name: str, sheet_name: [str, int], start_position: [str, int], insert_column_value: [str ,list]):

    wb = load_workbook(file_name)
    ws = wb[sheet_name]

    pattern = r'[a-z A-Z]+'
    result = re.findall(pattern, start_position)
    alphabet = result[0]

    pattern = r'\d+'
    result = re.findall(pattern, start_position)
    number = int(result[0])

    start_column = column_index_from_string(alphabet)

    if type(insert_column_value) == list:
        ws.insert_cols(start_column, amount=len(insert_column_value))
        for column_value in insert_column_value:
            ws.cell(row=number, column=start_column, value=column_value)
            start_column += 1
    else:
        ws.insert_cols(start_column)
        ws.cell(row=number, column=start_column, value=insert_column_value)
    wb.save(file_name)

1-2. 코드 설명

1-2-1. 함수 인자 설명

def insert_column(file_name: str, sheet_name: [str, int], start_position: [str, int], insert_column_value: [str ,list]):
  • file_name은 엑셀명 기입
  • sheet_name은 엑셀 시트명 기입(위치도 입력 가능)
  • start_position은 컬럼을 넣을 위치를 의미
    • cell값 및 머리글을 기입해도 인식가능
      • ex) A1 또는 해당열의 머리글
    • 단 머리글로 기입하면 1열에 컬럼이 기입됨
    • 위치로 지정하고 싶으면 int형으로 기입
  • insert_column_value 은 기입하고자 할 컬럼의 이름
    • '호호'라는 컬럼을 넣고 싶으면 해당 인자에 '호호'를 기입
    • 만약 여러개의 컬럼을 넣고자 한다면 list형식으로 넣으면 된다.
      • ex) [호호, 하하]를 넣으면 '호호', '하하' 열 두개가 생김

1-2-2. 엑셀값 읽기 및 start_column 추출

wb = load_workbook(file_name)
ws = wb[sheet_name]

pattern = r'[a-z A-Z]+'
result = re.findall(pattern, start_position)
alphabet = result[0]

pattern = r'\d+'
result = re.findall(pattern, start_position)
number = int(result[0])

start_column = column_index_from_string(alphabet)
  • openpyxl 라이브러리를 이용해서 엑셀 호출 및 시트값을 읽는다.
  • 정규식을 이용하여 start_position의 인자를 분석한다
    • 해당 정규식은 cell값을 추출하기 위한 정규식이다.
    • 즉, cell값이 아니면 alphabet 및 number는 아무런 값도 저장되지 않는다.
    • ex) A1이면 alphabet은 A number는 1
  • 분석한 값이 있으면 column_index_from_string을 통해 위치를 반환하고 해당 값을 start_column에 저장한다.

1-2-3. 열 삽입

if type(insert_column_value) == list:
    ws.insert_cols(start_column, amount=len(insert_column_value))
    for column_value in insert_column_value:
        ws.cell(row=number, column=start_column, value=column_value)
        start_column += 1
else:
    ws.insert_cols(start_column)
    ws.cell(row=number, column=start_column, value=insert_column_value)
wb.save(file_name)
  • insert_column_value값이 list인지 확인한다.
    • list 값일 경우 for문을 이용하여 컬럼을 넣어준다.
  • insert_cols을 통해 사용자가 지정한 위치에 빈값의 컬럼을 넣어준다.
  • cell을 통해 사용자가 지정한 값을 해당 cell에 넣어준다.

Insert Rows

2-1. 전체 코드

def insert_row(file_name: str, sheet_name: [str, int], start_row: int, num_rows_to_insert: int):

    wb = load_workbook(file_name)
    ws = wb[sheet_name]

    ws.insert_rows(start_row, amount=num_rows_to_insert)
    wb.save(file_name)

2-2 코드 설명

2-2-1. 함수 인자 설명

def insert_row(file_name: str, sheet_name: [str, int], start_row: int, num_rows_to_insert: int):
  • file_name은 엑셀명 기입
  • sheet_name은 엑셀 시트명 기입(위치도 입력 가능)
  • start_row는 시작 행
  • num_rows_to_insert는 몇개의 행을 삽입할지 결정하는 값

2-2-2. 엑셀값 읽기

wb = load_workbook(file_name)
ws = wb[sheet_name]
  • openpyxl 라이브러리를 이용해서 엑셀 호출 및 시트값을 읽는다.

2-2-3. 행 삽입

ws.insert_rows(start_row, amount=num_rows_to_insert)
wb.save(file_name)
  • insert_rows를 통해 행을 삽입한다.
    • start_row는 사용자가 원하는 시작위치
    • amount는 사용자가 원하는 행 갯수를 의미한다.
profile
기타치는 개발자

0개의 댓글