Appia의 IT세상

엑셀[Excel] Win32com 이용하여, 특정열의 같은 내용끼리 셀 병합하기 (Merge하기) - 엑셀 자동화 본문

Python/Python Office 자동화_EXCEL_Outlook

엑셀[Excel] Win32com 이용하여, 특정열의 같은 내용끼리 셀 병합하기 (Merge하기) - 엑셀 자동화

Appia 2021. 5. 18. 06:15
반응형

엑셀[Excel] Win32com 이용하여, 특정열의 같은 내용끼리 셀 병합하기 (Merge하기) - 엑셀 자동화

엑셀[Excel] Win32com 이용하여, 특정열의 같은 내용끼리 셀 병합하기 (Merge하기) - 엑셀 자동화

이번 포스팅에서는 셀 병합에 대해서 조금더 고급 방법에 대해서 이야기를 해보고자 합니다. 대부분 데이터를 엑셀로 추출할 때, 데이터의 내용들이 지속적으로 반복되는 부분들이 있습니다. 특히 카테고리등으로 묶을 때, 관련된 부분들이 표현이 됩니다. 이럴 경우 각 내용이 같은 부분에 대해서 셀병합(Merge)을 하게 됩니다. 이전에는 관련해서 자연스럽게 관련된 부분들을 손으로 작업을 하게 됩니다. 

그래서 이번 포스팅에서는 특정 기준으로 바탕으로 같은 내용끼리 셀을 병합하는 방법에 대해서 이야기를 해보고자 합니다. 

이번 포스팅을 진행하기 앞에서, 관련된 내용은 Pywin32모듈을 바탕으로 진행됩니다. 따라서 관련된 부분에 대해서 다음 링크의 부분을 활용해야 하기 때문에 Pywin32을 설치 해주시길 바랍니다. 

 

파이썬[Python] 014 Pywin32 설치

 

파이썬[Python] 014 Pywin32 설치

오늘은 pywin32모듈 설치 하는 방법에 대해서 살펴 보겠습니다. 많은 분들이 python을 사용하는 이유 중 하나는 업무에 있어서 반복적이고 지속적인 업무들에 대해 자동화 하기 위해서 사용 하는 분

appia.tistory.com

그럼 먼저 전체 코드를 살펴보겠습니다. 

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)

 

파이썬 [Python] win32com 이용하여, 엑셀(Excel) 셀 병합하기(Merge)

파이썬 [Python] win32com 이용하여, 엑셀(Excel) 셀 병합하기(Merge) 엑셀을 하다보면, 다양한 셀들을 편집하는 기능을 수행하게 됩니다. 그중에서 하나 중요한 것은 셀을 Merge 해야하는 경우도 발생

appia.tistory.com

이번 포스팅에서는 엑셀[Excel] Win32com 이용하여, 특정열의 같은 내용끼리 셀 병합하기 (Merge하기) - 엑셀 자동화라는 주제로 포스팅을 해봤습니다. 혹 궁금하신 점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다. 

반응형
Comments