일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- git
- 파워포인트
- 파이썬
- windows
- 엑셀
- Android
- pyqt5
- 파이썬3
- office
- 문자열
- html
- python
- 깃
- 오피스
- 윈도우11
- 안드로이드
- matlab
- win32com
- Windows10
- python3
- Windows11
- 윈도우10
- pythongui
- Outlook
- Excel
- pandas
- 비주얼베이직
- 파이썬GUI
- VBA
- 아웃룩
Appia의 IT세상
엑셀[Excel] Win32com 이용하여, 특정열의 같은 내용끼리 셀 병합하기 (Merge하기) - 엑셀 자동화 본문
엑셀[Excel] Win32com 이용하여, 특정열의 같은 내용끼리 셀 병합하기 (Merge하기) - 엑셀 자동화
Appia 2021. 5. 18. 06:15엑셀[Excel] Win32com 이용하여, 특정열의 같은 내용끼리 셀 병합하기 (Merge하기) - 엑셀 자동화
이번 포스팅에서는 셀 병합에 대해서 조금더 고급 방법에 대해서 이야기를 해보고자 합니다. 대부분 데이터를 엑셀로 추출할 때, 데이터의 내용들이 지속적으로 반복되는 부분들이 있습니다. 특히 카테고리등으로 묶을 때, 관련된 부분들이 표현이 됩니다. 이럴 경우 각 내용이 같은 부분에 대해서 셀병합(Merge)을 하게 됩니다. 이전에는 관련해서 자연스럽게 관련된 부분들을 손으로 작업을 하게 됩니다.
그래서 이번 포스팅에서는 특정 기준으로 바탕으로 같은 내용끼리 셀을 병합하는 방법에 대해서 이야기를 해보고자 합니다.
이번 포스팅을 진행하기 앞에서, 관련된 내용은 Pywin32모듈을 바탕으로 진행됩니다. 따라서 관련된 부분에 대해서 다음 링크의 부분을 활용해야 하기 때문에 Pywin32을 설치 해주시길 바랍니다.
그럼 먼저 전체 코드를 살펴보겠습니다.
import win32com.client
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True
workbook = excel.Workbooks.Add() # WorkBooks 생성
sheet = workbook.Worksheets("Sheet1")
# 데이터 입력 부
sheet.Range("A1").value = "Appia"
sheet.Range("A2").value = "Appia"
sheet.Range("A3").value = "Appia"
sheet.Range("A4").value = "Best"
sheet.Range("A5").value = "Best"
sheet.Range("A6").value = "Vest"
sheet.Range("A7").value = "Vest"
sheet.Range("A8").value = "Fest"
# 동일 기준에 따른 셀 병합
startline = 0
value = None
Endline = 0
excel.DisplayAlerts = True
for i in range(1, 9):
print(i)
if value == None : # 처음 시작
value = sheet.Range("A" + str(i)).value
startline = i
elif value != sheet.Range("A"+str(i)).value:
value = sheet.Range("A" + str(i)).value
print(sheet.Range("A"+str(i)).value)
Endline = i - 1
excel.DisplayAlerts = False
sheet.Range("A"+str(startline)+":A"+str(Endline)).Merge()
startline = i
else :
print("OK")
위에서 보이는 바와 같이 특정 엑셀 파일을 열어서 작업한 것은 아니고, 새로운 엑셀 파일을 열어서 데이터를 입력하게 코드를 작성하였습니다.
다음과 같이 데이터 입력부를 통해서 원하는 데이터를 Write 하였습니다.
sheet.Range("A1").value = "Appia"
sheet.Range("A2").value = "Appia"
sheet.Range("A3").value = "Appia"
sheet.Range("A4").value = "Best"
sheet.Range("A5").value = "Best"
sheet.Range("A6").value = "Vest"
sheet.Range("A7").value = "Vest"
sheet.Range("A8").value = "Fest"
동일 기준을 파악하기 위해서 몇가지 변수들이 필요로 하였습니다. 그래서 다음과 같이 3가지 변수를 선언하였습니다.
startline = 0 #병합 시작 위치를 파악하기 위함
value = None #데이터의 동일 여부를 확인하기 위함
Endline = 0 #병합 마무리 위치를 파악하기 위함
그런 후에 다음 조건을 통해서 동일 여부를 확인하고, 셀을 병합하도록 하였습니다.
for i in range(1, 9):
print(i)
if value == None : # 처음 시작
value = sheet.Range("A" + str(i)).value
startline = i
elif value != sheet.Range("A"+str(i)).value:
value = sheet.Range("A" + str(i)).value
Endline = i - 1
excel.DisplayAlerts = False
sheet.Range("A"+str(startline)+":A"+str(Endline)).Merge()
startline = i
위에서 코드르 보면 처음 시작할 때, value == None을 바탕으로 확인을 합니다. 그래서, 현재 셀의 값을 기준 값으로 삼을 value 변수에 치환합니다. 그런후 반복문에서 사용되는 i를 startline 변수에 치환합니다.
그리고 나서 계속 반복을 통해서 기준값인 value와 현재 셀의 값의 동일 여부를 확인합니다. 만약 동일하지 않을 경우, 기준값을 먼저 변경을 해줍니다. 즉, value에 새로운 값이 치환됩니다. 그리고 나서, 병합될 위치를 파악을 합니다. 즉 바로 이전 셀을 기준으로 병합이 이루어 지게 됩니다. 따라서 i - 1을 통해서 Endline을 설정합니다. 그리고 나서 sheet.Range("A"+str(startline)+":A"+str(Endline)).Merge() 부분을 통해서 병합을 진행한 후 startline을 i로 치환합니다.
위의 전체코드를 실행하면 다음과 같은 결과가 나타납니다.
이와 같은 방법으로 엑셀의 셀을 자동으로 같은 내용끼리 병합할 수 있습니다.
파이썬 [Python] win32com 이용하여, 엑셀(Excel) 셀 병합하기(Merge)
이번 포스팅에서는 엑셀[Excel] Win32com 이용하여, 특정열의 같은 내용끼리 셀 병합하기 (Merge하기) - 엑셀 자동화라는 주제로 포스팅을 해봤습니다. 혹 궁금하신 점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다.
'Python > Python Office 자동화_EXCEL_Outlook' 카테고리의 다른 글
파이썬 [Python] win32com 이용하여, 아웃룩(Outlook) 첨부파일 첨부하여 메일 보내기 (0) | 2021.05.22 |
---|---|
엑셀[Excel] Win32com 이용하여, 셀 오름차순, 내림차순 정렬하기(Sort) (0) | 2021.05.20 |
엑셀[Excel] Win32com 이용하여, 셀 복사(Copy) 붙여놓기(Paste) - 엑셀 자동화 (2) | 2021.05.16 |
파이썬 [Python] win32com 이용하여, 엑셀(Excel)에서 셀의 데이터 타입에 따른 셀의 색 변경하기 (0) | 2021.05.14 |
파이썬 [Python] win32com 이용하여, 엑셀(Excel)에서 빈칸의 셀 색깔 변경하기 (1) | 2021.05.13 |