[RPA] 엑셀 - 조건에 맞게 수정후 최종성적내기

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

Quiz)
- 출석 10점
- 퀴즈1 10
- 퀴즈2 10
- 중간고사 20
- 기말고사 30
- 프로젝트 20
------------------------

- 총합 100

최종성적 검토하다가 퀴즈2문제에 오류가 발생하여 모두 만점 처리.

현재까지 작성된 최종성적 데이터를 기준으로 아래와 같이 수정.
1. 퀴즈2 점수를 10으로 수정
2. H열에 총점(SUM 이용), I열에 성적 정보 추가
- 총점 90이상 A, 80이상 B, 70이상 C, 나머지 D
3. 출석이 5미만인 학생은 총점과 상관없이 F

최종파일명 : scores.xlsx

[현재까지 작성된 최종 성적 데이터]
학번, 출석, 퀴즈1, 퀴즈2, 중간고사, 기말고사, 프로젝트
1,10,8,5,14,26,12
2,7,3,7,15,24,18
3,9,5,8,8,12,4
4,7,8,7,17,21,18
5,7,8,7,16,25,15
6,3,5,8,8,17,0
7,4,9,10,16,27,18
8,6,6,6,15,19,17
9,10,10,9,19,30,19
10,9,8,8,20,25,20


from openpyxl import Workbook
wb = Workbook()
ws = wb.active

#현재까지 작성된 최종 성적 데이터를 넣기
ws.append(("학번", "출석", "퀴즈1", "퀴즈2", "중간고사", "기말고사", "프로젝트")) # 첫행

scores=[
(1,10,8,5,14,26,12),
(2,7,3,7,15,24,18),
(3,9,5,8,8,12,4),
(4,7,8,7,17,21,18),
(5,7,8,7,16,25,15),
(6,3,5,8,8,17,0),
(7,4,9,10,16,27,18),
(8,6,6,6,15,19,17),
(9,10,10,9,19,30,19),
(10,9,8,8,20,25,20)
] # 값을 변수에 넣기

for s in scores: #기존 성적 데이터 넣기
    ws.append(s)

wb.save("scores.xlsx")

 

# 1. 퀴즈2 모두 10점으로 변경

- enumerate() :리스트의 원소의에 순서값을 부여하는 함수

for idx, cell in enumerate(ws["D"]): #D : 퀴즈2
    if idx == 0: #제목인 경우 스킵
        continue
    cell.value = 10

 

 

# 2. H열에 총점(SUM 이용), I열에 성적 정보 추가

ws["H1"] = "총점"
ws["I1"] = "성적"

 

# 총점구하기

# 총점
# a b c d e f g h i
# 1 2 3 4 5 6 7 8 9
for idx, score in enumerate(scores, start=2):  #start=2: 첫번째줄은 제목이라 두번째줄부터 값입력
    sum_val = sum(score[1:]) - score[3] + 10  # 총점 : 인덱스 0은 학번이라 제와하고 기존의 퀴즈2값은 빼고 10을 더함
    ws.cell(row=idx, column=8).value = "=SUM(B{}:G{})".format(idx, idx)
    # SUM(B2:G2)
    # SUM(B3:G3)....
    # 위에서 선언한 score변수는 업데이트가 안되었으므로 기존 값을 빼고 10을 더함
    # idx로 값을 더해줄때는 셀에 있는 값이라 업데이트 된 값들이라 따로 처리 X

 

# 성적구하기

# - 총점 90이상 A, 80이상 B, 70이상 C, 나머지 D
    grade = None # 성적
    if sum_val >= 90:
        grade = "A"
    elif sum_val >= 80:
        grade = "B"
    elif sum_val >= 70:
        grade = "C"
    else:
        grade = "D"
        
    ws.cell(row=idx, column=9).value = grade # I열에 성적 정보

 

# 3. 출석이 5미만인 학생은 총점과 상관없이 F

# 3. 출석이 5미만인 학생은 총점과 상관없이 F
    if score[1] < 5:
        grade = "F"

 

 

# 17_quiz.py

# Quiz)
# - 출석 10점
# - 퀴즈1 10
# - 퀴즈2 10
# - 중간고사 20
# - 기말고사 30
# - 프로젝트 20
# ------------------------
# - 총합 100
#
# 최종성적 검토하다가 퀴즈2문제에 오류가 발생하여 모두 만점 처리.
# 현재까지 작성된 최종성적 데이터를 기준으로 아래와 같이 수정.
# 1. 퀴즈2 점수를 10으로 수정
# 2. H열에 총점(SUM 이용), I열에 성적 정보 추가
# - 총점 90이상 A, 80이상 B, 70이상 C, 나머지 D
# 3. 출석이 5미만인 학생은 총점과 상관없이 F
#
#  최종파일명 : scores.xlsx
#
# [현재까지 작성된 최종 성적 데이터]
# 학번, 출석, 퀴즈1, 퀴즈2, 중간고사, 기말고사, 프로젝트
# 1,10,8,5,14,26,12
# 2,7,3,7,15,24,18
# 3,9,5,8,8,12,4
# 4,7,8,7,17,21,18
# 5,7,8,7,16,25,15
# 6,3,5,8,8,17,0
# 7,4,9,10,16,27,18
# 8,6,6,6,15,19,17
# 9,10,10,9,19,30,19
# 10,9,8,8,20,25,20


from openpyxl import Workbook
wb = Workbook()
ws = wb.active

#현재까지 작성된 최종 성적 데이터를 넣기
ws.append(("학번", "출석", "퀴즈1", "퀴즈2", "중간고사", "기말고사", "프로젝트")) # 첫행

scores=[
(1,10,8,5,14,26,12),
(2,7,3,7,15,24,18),
(3,9,5,8,8,12,4),
(4,7,8,7,17,21,18),
(5,7,8,7,16,25,15),
(6,3,5,8,8,17,0),
(7,4,9,10,16,27,18),
(8,6,6,6,15,19,17),
(9,10,10,9,19,30,19),
(10,9,8,8,20,25,20)
] # 값을 변수에 넣기

for s in scores: #기존 성적 데이터 넣기
    ws.append(s)

# 데이터가공
# 1. 퀴즈2 모두 10점으로 변경
for idx, cell in enumerate(ws["D"]): #D : 퀴즈2
    if idx == 0: #제목인 경우 스킵
        continue
    cell.value = 10

# 2. H열에 총점(SUM 이용), I열에 성적 정보 추가
ws["H1"] = "총점"
ws["I1"] = "성적"

# 총점
# a b c d e f g h i
# 1 2 3 4 5 6 7 8 9
for idx, score in enumerate(scores, start=2):  #start=2: 첫번째줄은 제목이라 두번째줄부터 값입력
    sum_val = sum(score[1:]) - score[3] + 10  # 총점 : 인덱스 0은 학번이라 제와하고 기존의 퀴즈2값은 빼고 10을 더함
    ws.cell(row=idx, column=8).value = "=SUM(B{}:G{})".format(idx, idx)
    # SUM(B2:G2)
    # SUM(B3:G3)....
    # 위에서 선언한 score변수는 업데이트가 안되었으므로 기존 값을 빼고 10을 더함
    # idx로 값을 더해줄때는 셀에 있는 값이라 업데이트 된 값들이라 따로 처리 X

    # - 총점 90이상 A, 80이상 B, 70이상 C, 나머지 D
    grade = None # 성적
    if sum_val >= 90:
        grade = "A"
    elif sum_val >= 80:
        grade = "B"
    elif sum_val >= 70:
        grade = "C"
    else:
        grade = "D"

    # 3. 출석이 5미만인 학생은 총점과 상관없이 F
    if score[1] < 5:
        grade = "F"

    ws.cell(row=idx, column=9).value = grade # I열에 성적 정보

wb.save("scores.xlsx")

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

[RPA] 데스크탑UI - 스크린, 이미지처리, 이미지처리(속도개선), 이미지처리(대기)  (0) 2021.07.29
[RPA] 데스크탑UI - 환경설정, 마우스이동, 마우스액션, 마우스정보  (0) 2021.07.29
[RPA] 엑셀 - 수식, 데이터수식, 병합, 병합해제, 이미지  (0) 2021.07.28
[RPA] 엑셀 - 차트, 셀스타일  (0) 2021.07.28
[RPA] 엑셀 - 삽입, 삭제, 이동  (0) 2021.07.27
'Tools/RPA' 카테고리의 다른 글
  • [RPA] 데스크탑UI - 스크린, 이미지처리, 이미지처리(속도개선), 이미지처리(대기)
  • [RPA] 데스크탑UI - 환경설정, 마우스이동, 마우스액션, 마우스정보
  • [RPA] 엑셀 - 수식, 데이터수식, 병합, 병합해제, 이미지
  • [RPA] 엑셀 - 차트, 셀스타일
min_sol
min_sol
  • min_sol
    비글개발연구소🐾
    min_sol
  • 전체
    오늘
    어제
    • 분류 전체보기 (279)
      • 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 (32)
        • IntelliJ (1)
        • VSCode (1)
        • GitHub (10)
        • RPA (20)
      • Security (9)
      • etc (21)
        • ERROR (5)
        • 세미나 | 교육 (10)
        • 자격증 (1)
        • 일상 (2)
        • 2021 (2)
  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
min_sol
[RPA] 엑셀 - 조건에 맞게 수정후 최종성적내기
상단으로

티스토리툴바