[RPA] 엑셀자동화 - 파일불러와서 데이터 추출, 셀 영역, 찾기

2021. 7. 26. 23:43·Tools/RPA
YouTube 나도코딩님의 동영상을 보면서 공부한 내용입니다.
부족한 내용이나 잘못된 내용은 댓글남겨주시면 감사하겠습니다!
출처 : https://www.youtube.com/channel/UC7iAOLiALt2rtMVAWWl4pnw

1. 이미 만들어진 파일 불러와서 데이터 읽기

from openpyxl import load_workbook  # 파일불러오기
wb = load_workbook("sample.xlsx")   # sample.xlsx 파일에서 wb을 불러옴
ws = wb.active   # 활성화된 Sheet

# cell데이터 불러오기
for x in range(1, 11):
    for y in range(1,11):
        print(ws.cell(row=x, column=y).value, end=" ") #1 2 3 4
    print() # 줄바꿈

 

# cell 갯수를 모를 때

for x in range(1, ws.max_row + 1): # 최대 row수 = 10인데 +1을 해야 그 직전까지 출력됨
    for y in range(1, ws.max_column + 1):
        print(ws.cell(row=x, column=y).value, end=" ")  # 1 2 3 4
    print()  # 줄바꿈

 

# 4_open.file.py

from openpyxl import load_workbook  # 파일불러오기
wb = load_workbook("sample.xlsx")   # sample.xlsx 파일에서 wb을 불러옴
ws = wb.active   # 활성화된 Sheet

# # cell데이터 불러오기
# for x in range(1, 11):
#     for y in range(1,11):
#         print(ws.cell(row=x, column=y).value, end=" ") #1 2 3 4
#     print() # 줄바꿈


#cell 갯수를 모를 때
for x in range(1, ws.max_row + 1): # 최대 row수 = 10인데 +1을 해야 그 직전까지 출력됨
    for y in range(1, ws.max_column + 1):
        print(ws.cell(row=x, column=y).value, end=" ")  # 1 2 3 4
    print()  # 줄바꿈

5.  셀영역_1

# 1중씩 데이터 넣기

from openpyxl import Workbook
from random import *

wb = Workbook()
ws = wb.active

# 1줄씩 데이터 넣기 -  리스트나 튜플 형식으로
ws.append(["번호", "영어", "수학"]) #A, B, C
for i in range(1, 11): #10개 데이터 넣기
    ws.append([i, randint(0,100), randint(0,100)])

wb.save("sample_5.xlsx")

 

# 지정된 열의 column가져오기 - ws["해당열"]

col_B = ws["B"]
print(col_B)
from openpyxl import Workbook
from random import *

wb = Workbook()
ws = wb.active

# 1줄씩 데이터 넣기 -  리스트나 튜플 형식으로
ws.append(["번호", "영어", "수학"]) #A, B, C
for i in range(1, 11): #10개 데이터 넣기
    ws.append([i, randint(0,100), randint(0,100)])

# B열의 영어column만 가지고 오기
col_B = ws["B"]
print(col_B)

wb.save("sample_5.xlsx")

 

# 특정 열의 셀 데이터 가져오기

from openpyxl import Workbook
from random import *

wb = Workbook()
ws = wb.active

# 1줄씩 데이터 넣기 -  리스트나 튜플 형식으로
ws.append(["번호", "영어", "수학"]) #A, B, C
for i in range(1, 11): #10개 데이터 넣기
    ws.append([i, randint(0,100), randint(0,100)])

# 특정 열의 셀 데이터 가져오기
col_B = ws["B"]
for cell in col_B:
    print(cell.value)

wb.save("sample_5.xlsx")

 

# 특정 여러 열들 데이터 가져오기 - ws["여기부터:여기까지"]

col_range = ws["B:C"] # B부터 C
for cols in col_range:
    for cell in cols:
        print(cell.value)

 

# 특정 행 가져오기 - ws[행번호]

row_title = ws[1]
for cell in row_title:
    print(cell.value)

 

# 특정 여러 행 가져오기

row_range = ws[2:6]
# 1번째 줄인 title을 제외하고 2번째 줄에서 6번째 줄까지 가지고 오기 2,3,4,5,6가져옴.
for rows in row_range:
    for cell in rows:
        print(cell.value, end=" ")
    print()

 

# 행의 번호를 모를 경우

row_range = ws[2:ws.max_row] # 2번째 줄부터 마지막 줄까지
for rows in row_range:
    for cell in rows:
        print(cell.value, end=" ")
    print()

 

# 셀 정보(번호) 가져오기

row_range = ws[2:ws.max_row] # 2번째 줄부터 마지막 줄까지
for rows in row_range:
    for cell in rows:
        print(cell.coordinate, end=" ")
    print()

 

# 행이나 열 번호가 클 경우 도움

from openpyxl.utils.cell import coordinate_from_string  # 셀 정보 가져오기
row_range = ws[2:ws.max_row] # 2번째 줄부터 마지막 줄까지
for rows in row_range:
    for cell in rows:
        xy = coordinate_from_string(cell.coordinate)
        #A250을 A / 250 으로 끊어줘서 행이나 열 번호가 클 때 도움
        print(xy, end=" ")
    print()

 

from openpyxl.utils.cell import coordinate_from_string  # 셀 정보 가져오기
row_range = ws[2:ws.max_row] # 2번째 줄부터 마지막 줄까지
for rows in row_range:
    for cell in rows:
        xy = coordinate_from_string(cell.coordinate)
        #A250을 A / 250 으로 끊어줘서 행이나 열 번호가 클 때 도움
        print(xy[0], end="")  # A
        print(xy[1], end=" ") # 1
        # 위 두줄과 같음 print(cell.coordinate, end=" ")
    print()

 

# 5_cell_range.py

from openpyxl import Workbook
from random import *

wb = Workbook()
ws = wb.active

# 1줄씩 데이터 넣기 -  리스트나 튜플 형식으로
ws.append(["번호", "영어", "수학"]) #A, B, C
for i in range(1, 11): #10개 데이터 넣기
    ws.append([i, randint(0,100), randint(0,100)])

# B열의 영어column만 가지고 오기
# col_B = ws["B"]
# print(col_B)

# 특정 열의 셀 데이터 가져오기
# for cell in col_B:
#     print(cell.value)

# 영어와 수학 컬럼 같이 가져오기
# col_range = ws["B:C"] # B부터 C
# for cols in col_range:
#     for cell in cols:
#         print(cell.value)

# ROW도 가능 - 첫번째 행 가져오기
# row_title = ws[1]
# for cell in row_title:
#     print(cell.value)

# 여러 줄의 행 가져오기
# row_range = ws[2:6]
# 1번째 줄인 title을 제외하고 2번째 줄에서 6번째 줄까지 가지고 오기 2,3,4,5,6가져옴.
# for rows in row_range:
#     for cell in rows:
#         print(cell.value, end=" ")
#     print()

# 행의 번호를 잘 모를 때
# row_range = ws[2:ws.max_row] # 2번째 줄부터 마지막 줄까지
# for rows in row_range:
#     for cell in rows:
#         print(cell.value, end=" ")
#     print()

from openpyxl.utils.cell import coordinate_from_string  # 셀 정보 가져오기
row_range = ws[2:ws.max_row] # 2번째 줄부터 마지막 줄까지
for rows in row_range:
    for cell in rows:
        # print(cell.coordinate, end=" ")
        xy = coordinate_from_string(cell.coordinate)
        #A250을 A / 250 으로 끊어줘서 행이나 열 번호가 클 때 도움
        # print(xy, end=" ")
        print(xy[0], end="")  # A
        print(xy[1], end=" ") # 1
        # 위 두줄과 같음 print(cell.coordinate, end=" ")
    print()

wb.save("sample_5.xlsx")

 

# 전체 row의 셀 정보

# 전체 rows - 모든 줄
#print(ws.rows)로 하면 알수 없는 정보가 뜸
print(tuple(ws.rows)) # 괄호 묶음 단위가 행, 밑 두줄이랑 같음
for row in tuple(ws.rows):
    print(row)

 

# 인덱스 이용하여 값 가져오기

# 일부 row
for row in tuple(ws.rows):
    print(row[1].value) # 인덱스1에 있는 값 찍어옴
# 다른 방법
for row in ws.iter_rows():  # 전체 row 반복해서 가져옴
    print(row[1].value)

 

# 타이틀만 출력

# 타이틀만 출력
for column in tuple(ws.columns):
    print(column[0].value)
# 다른 방법
for column in ws.iter_cols(): #전체 row
    print(column[0].value)

 

# 지정한 부분 출력

# 2번째 줄부터 11번째 줄까지, 2번째 열부터 3번째 열까지
for row in ws.iter_rows(min_row=2, max_row=11, min_col=2, max_col=3):
    print(row[0].value, row[1].value)

 

# 데이터모양 출력 확인

# 데이터 출력되는 모양 확인 - 범위 지정안할 시 min젤 작은, max젤 큰 자동으로 됨.
# 위에서 아래로
for row in ws.iter_rows(min_row=2, max_row=11, min_col=2, max_col=3):
    print(row)
# 왼쪽에서 오른쪽으로
for col in ws.iter_cols(min_row=1, max_row=5, min_col=1, max_col=3):
    print(col)

 

# 5_cell_range.py

from openpyxl import Workbook
from random import *

wb = Workbook()
ws = wb.active

# 1줄씩 데이터 넣기 -  리스트나 튜플 형식으로
ws.append(["번호", "영어", "수학"]) #A, B, C
for i in range(1, 11): #10개 데이터 넣기
    ws.append([i, randint(0,100), randint(0,100)])

# B열의 영어column만 가지고 오기
# col_B = ws["B"]
# print(col_B)

# 특정 열의 셀 데이터 가져오기
# for cell in col_B:
#     print(cell.value)

# 영어와 수학 컬럼 같이 가져오기
# col_range = ws["B:C"] # B부터 C
# for cols in col_range:
#     for cell in cols:
#         print(cell.value)

# ROW도 가능 - 첫번째 행 가져오기
# row_title = ws[1]
# for cell in row_title:
#     print(cell.value)

# 여러 줄의 행 가져오기
# row_range = ws[2:6]
# 1번째 줄인 title을 제외하고 2번째 줄에서 6번째 줄까지 가지고 오기 2,3,4,5,6가져옴.
# for rows in row_range:
#     for cell in rows:
#         print(cell.value, end=" ")
#     print()

# 행의 번호를 잘 모를 때
# row_range = ws[2:ws.max_row] # 2번째 줄부터 마지막 줄까지
# for rows in row_range:
#     for cell in rows:
#         print(cell.value, end=" ")
#     print()

# from openpyxl.utils.cell import coordinate_from_string  # 셀 정보 가져오기
# row_range = ws[2:ws.max_row] # 2번째 줄부터 마지막 줄까지
# for rows in row_range:
#     for cell in rows:
#         # print(cell.coordinate, end=" ")
#         xy = coordinate_from_string(cell.coordinate)
#         #A250을 A / 250 으로 끊어줘서 행이나 열 번호가 클 때 도움
#         # print(xy, end=" ")
#         print(xy[0], end="")  # A
#         print(xy[1], end=" ") # 1
#         # 위 두줄과 같음 print(cell.coordinate, end=" ")
#     print()

# 전체 rows - 모든 줄
#print(ws.rows)로 하면 알수 없는 정보가 뜸
# print(tuple(ws.rows)) # 괄호 묶음 단위가 행, 밑 두줄이랑 같음
# for row in tuple(ws.rows):
#     print(row)

# 일부 row
# for row in tuple(ws.rows):
#     print(row[1].value) # 인덱스1에 있는 값 찍어옴

# 다른 방법
# print()
# for row in ws.iter_rows():  # 전체 row 반복해서 가져옴
#     print(row[1].value)

# 타이틀만 출력
# for column in tuple(ws.columns):
#     print(column[0].value)

# 다른 방법
# for column in ws.iter_cols(): #전체 row
#     print(column[0].value)

# 2번째 줄부터 11번째 줄까지, 2번째 열부터 3번째 열까지
# for row in ws.iter_rows(min_row=2, max_row=11, min_col=2, max_col=3):
#     print(row[0].value, row[1].value)

# 데이터 출력되는 모양 확인 - 범위 지정안할 시 min젤 작은, max젤 큰 자동으로 됨.
# 위에서 아래로
# for row in ws.iter_rows(min_row=2, max_row=11, min_col=2, max_col=3):
#     print(row)
# 왼쪽에서 오른쪽으로
# for col in ws.iter_cols(min_row=1, max_row=5, min_col=1, max_col=3):
#     print(col)

wb.save("sample_5.xlsx")

7. 검색

# 영어 성적이 80 점 이상인 학생 선별

from openpyxl import load_workbook
wb = load_workbook("sample_5.xlsx")
ws = wb.active

# 영어 성적이 80점 이상인 학생 선별
for row in ws.iter_rows(min_row=2):
    # 번호, 영어, 수학
    if int(row[1].value) > 80: # 값을 비교하기 위해 int사용
        print(row[0].value, "번 학생은 영어 천재")

wb.save("sample_modified.xlsx")

 

# 값 변경

# 값 변경
for row in ws.iter_rows(max_row=1):
    for cell in row:
        if cell.value == "영어":
            cell.value = "컴퓨터"

 

# 6_search.py

from openpyxl import load_workbook
wb = load_workbook("sample_5.xlsx")
ws = wb.active

# 영어 성적이 80점 이상인 학생 선별
for row in ws.iter_rows(min_row=2):
    # 번호, 영어, 수학
    if int(row[1].value) > 80: # 값을 비교하기 위해 int사용
        print(row[0].value, "번 학생은 영어 천재")

# 값 변경
for row in ws.iter_rows(max_row=1):
    for cell in row:
        if cell.value == "영어":
            cell.value = "컴퓨터"

wb.save("sample_modified.xlsx")

'Tools > RPA' 카테고리의 다른 글

[RPA] 엑셀 - 차트, 셀스타일  (0) 2021.07.28
[RPA] 엑셀 - 삽입, 삭제, 이동  (0) 2021.07.27
[RPA] 엑셀 자동화 - 시트생성, 시트탭 색상변경, 시트내용 복사, 데이터 입력(반복문), 데이터 가져오기  (0) 2021.07.26
[UiPath] Activity - if, switch, Flow Decision,While, Do While, Parallel, Pick / PickBranch  (0) 2021.07.03
[Uipath] Activity - Click, GetText, SetText, SendHotKey, InputDialog  (0) 2021.07.02
'Tools/RPA' 카테고리의 다른 글
  • [RPA] 엑셀 - 차트, 셀스타일
  • [RPA] 엑셀 - 삽입, 삭제, 이동
  • [RPA] 엑셀 자동화 - 시트생성, 시트탭 색상변경, 시트내용 복사, 데이터 입력(반복문), 데이터 가져오기
  • [UiPath] Activity - if, switch, Flow Decision,While, Do While, Parallel, Pick / PickBranch
min_sol
min_sol
  • min_sol
    비글개발연구소🐾
    min_sol
  • 전체
    오늘
    어제
    • 분류 전체보기 (278)
      • Programming (128)
        • Algorithm (52)
        • JAVA (40)
        • GIS (5)
        • PyQt (10)
        • C# (11)
        • Mobile (6)
        • AI (4)
      • Backend (36)
        • Spring (14)
        • JSP (11)
        • Network (5)
      • Frontend (29)
        • React (11)
        • Vue (13)
        • Next.js (4)
      • Database (10)
        • PostgreSQL (1)
        • Oracle (8)
        • Elasticsearch (1)
      • DevOps (8)
        • Linux (7)
        • Mac (1)
      • Tools (31)
        • IntelliJ (1)
        • GitHub (10)
        • RPA (20)
      • Security (9)
      • etc (21)
        • ERROR (5)
        • 세미나 | 교육 (10)
        • 자격증 (1)
        • 일상 (2)
        • 2021 (2)
  • 인기 글

  • 태그

    생능출판
    PyQt
    자료구조
    자동화
    자바
    VUE
    jsp
    RPA
    명품자바에센셜
    Java
    계산기
    백준
    코딩테스트
    PyQt5
    연습문제
    스윙
    알고리즘
    spring
    이클립스
    vue.js
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
min_sol
[RPA] 엑셀자동화 - 파일불러와서 데이터 추출, 셀 영역, 찾기
상단으로

티스토리툴바