본문 바로가기
프로그래밍/Python

Python_openpyxl_엑셀_04_행과 열, 범위 이동

by Choraengyi 2021. 2. 2.

1. 행, 열 삽입

테스트를 위한 데이터 입력

from openpyxl import Workbook

wb = Workbook()
ws = wb.active

i=1
for r in range(1,11):  
    for c in range(1,11):
        ws.cell(row=r, column=c, value = i)  
        i += 1
        
wb.save('col_row_test.xlsx')

- 결과

 

행 삽입

ws.insert_rows(5)   # 5행에 행 삽입

- 결과

더보기

기존 5행에 있던 데이터부터 6행으로 밀리고 5행에 새로운 행 생성됨

 

행 삽입_다중

ws.insert_rows(5, 4)   # 5행에 행 4개 삽입

- 결과

 

열 삽입

ws.insert_cols(5)   # 5열에 열 삽입
ws.insert_cols(7, 3)   # 7열에 열 3개 삽입

- 결과

더보기

기존 5열에 있던 데이터부터 6열으로 밀리고 5열에 새로운 행 생성됨

위 5열 생성 작업 수행한 상태에서 7열부터 9열 빈 열로 생성되고 7열의 데이터는 10열로 밀림

 

 

2. 행, 열 삭제

행 삭제

ws.delete_rows(4)		# 4번 행 삭제
ws.delete_rows(6, 2)	# 6번 행부터 2개의 행 삭제

- 결과

더보기

4번째 행(30번대 데이터) 삭제 되고 5번째 행이 4번째 행(40번대 데이터)으로 올라옴

4번째 행 삭제된 이후 상황에서 6번째 행(60번대 데이터, 1열씩 올라갔으므로) 부터 7번째 행 삭제됨

 

열 삭제

ws.delete_cols(7)
ws.delete_cols(2,2)

- 결과

더보기

7번째 열(첫 데이터 7) 삭제 되고 8번째 열이 7번째 열으로 올라옴

4번째 열 삭제된 이후 2번째 열(첫 데이터 2) 부터 3번째 열 삭제됨, 앞 삭제 작업으로 영향 받는 열이 없음

 

 

3. 셀 범위 이동

이전1

코드1

ws.move_range("A1:G8", rows=2, cols=3)  # A1:G8 범위를 2행 아래, 3열 오른쪽으로 이동

- 결과1

더보기

이동하려는 셀에 데이터가 있을 경우 그 데이터 값을 덮어 씀

 

이전2

코드2

ws.move_range("D3:J10", rows=-2, cols=-3)  # D3:J10 범위를 2행 위, 3열 왼쪽으로 이동

- 결과2

더보기

이동하려는 셀에 데이터가 있을 경우 그 데이터 값을 덮어 씀

 

 

4. 셀 범위 이동_수식 존재

이전

i=1
for r in range(1,5):  
    for c in range(1,5):
        ws.cell(row=r, column=c, value = i)  
        i += 1

for row_num in range(1,5):
    ws[f'E{row_num}'] = f'=SUM(A{row_num}:D{row_num})'

이전 엑셀

더보기

E 열에 각 행의 합 계산됨

 

셀 범위 이동 테스트

i=1
for r in range(1,5):  
    for c in range(1,5):
        ws.cell(row=r, column=c, value = i)  
        i += 1

for row_num in range(1,5):
    ws[f'E{row_num}'] = f'=SUM(A{row_num}:D{row_num})'  # 동일 행에서 E열에 A열 ~ D열의 합 계산
    
ws.move_range("A1:E4", rows=4, cols=4)  # A1:E4 범위를 2행 아래, 3열 오른쪽으로 이동

셀 범위 이동 테스트, 결과

더보기

수식이 들어간 셀은 이동되지 않음, 이동되어 A열 D 열 값이 없기 때문에 SUM 함수 값 0으로 출력됨

 

 

수식 이동 가능한 범위 이동

ws.move_range("A1:E4", rows=4, cols=4, translate=True)  # 수식 포함, A1:E4 범위를 2행 아래, 3열 오른쪽으로 이동

- 결과

더보기

수식 까지 이동 되어 SUM 함수 정상 작동

 

 

#참고 : https://openpyxl.readthedocs.io/

728x90
반응형

댓글