인프런 커뮤니티 질문&답변

kun님의 프로필 이미지
kun

작성한 질문수

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

셀 배경색 구하기

해결된 질문

작성

·

48

·

수정됨

1

 일코님 안녕하세요. 궁금한 것이 있어서 질문 드립니다.

다음과 같은 표에서 색이 칠해져 있는 셀을 구분하고 싶습니다.

반복문을 이용해서 A열에 몇번째 행에 색이 칠해져 있는지 구하려고 합니다.

현재 아래와 같은 코드로 셀 배경 색 값을 구하고 반복문을 돌리려고 하는데 잘 되지 않아서 질문 드립니다.

아래 코드는 일부분 입니다.

def FindCellColor():
    hwp.HAction.Run("TableCellBlock")
    hwp.HAction.GetDefault("CellBorderFill", hwp.HParameterSet.HCellBorderFill.HSet)
    cell_fill = hwp.HParameterSet.HCellBorderFill.FillAttr.WinBrushFaceColor
    hwp.HAction.Execute("CellBorderFill", hwp.HParameterSet.HCellBorderFill.HSet)
    
        
    print(cell_fill)
    if cell_fill == 0:
        Color = 0       
    else :
        Color = 1       

    return Color

def 셀코드화():
    SpanCnt = 0
    hwp.HAction.Run("MoveDocBegin")
    for p in range(2):
        ColArr = []
        hwp.HAction.Run("SelectCtrlReverse")
        hwp.HAction.Run("ShapeObjTextBoxEdit")
        hwp.HAction.Run("TableLowerCell")
        
        for k in range(4):
            SpanCnt = 1
            
            for i in range(5):
                hwp.HAction.Run("Cancel")
                Color = FindCellColor()
                if Color == 1:
                    ColArr[p].append(SpanCnt)
                    SpanCnt = 0
                    break
                else :
                    hwp.HAction.Run("Cancel")
                    hwp.HAction.Run("TableLowerCell")
                    SpanCnt = SpanCnt + 1
                    hwp.HAction.Run("Cancel")
                
            hwp.HAction.Run("TableColPageUp")
            hwp.HAction.Run("TableRightCell")
            hwp.HAction.Run("TableLowerCell")
        
        hwp.HAction.Run("MovePageDown")    
        print("p값은",p)

 

 

아래 자바스크립트 코드로 한글에서 직접 하나씩 해보면 잘 됩니다..

function OnDocument_New(){
   
        // 현재 테이블 셀을 선택
        HAction.Run("TableCellBlock");
    
    
    HAction.GetDefault("CellBorderFill", HParameterSet.HCellBorderFill.HSet);
	with (HParameterSet.HCellBorderFill)
	{
		cell_fill = FillAttr.WinBrushFaceColor 
		
	}
	HAction.Execute("CellBorderFill", HParameterSet.HCellBorderFill.HSet);
    
        // 배경색 정보를 알림으로 출력
        alertBasic("셀의 배경색: " + cell_fill);
    }
    
    
    
    function alertBasic(text, type) {
        XHwpMessageBox.String = text;
        XHwpMessageBox.Flag = type || 0;
        XHwpMessageBox.DoModal();
    }
    

 

답변 2

2

일코님의 프로필 이미지
일코
지식공유자

kun님 안녕하세요?

 

파이썬 기준으로

현재 셀의 색을 조회하는 방법은

셀 안에 커서를 둔 상태로 (셀블록 상태가 아니어도 됩니다.)

아래 세 줄의 코드를 실행하시면 됩니다.

pset = hwp.HParameterSet.HCellBorderFill  # 빈 파라미터셋 pset 생성
hwp.HAction.GetDefault("CellBorderFill", pset.HSet)  # pset에 현재 셀 속성값 채우기
color = pset.FillAttr.WinBrushFaceColor

셀에 아무 색도 적용되어 있지 않다면(초기상태라면)

값이 0입니다.

(TMI ?) 흰색과 초기상태는 겉보기는 같지만 리턴하는 속성값이 다른데,
흰색을 적용했으면 16777215를 리턴합니다.

그리고 만약, 셀의 색을 제거하고 싶은 경우
"흰색"이 아니라 "초기"상태로 되돌리려면
4294967295를 적용해야 합니다.

녹화_2024_10_18_20_56_13_118.gif

 

그래서, FindCellColor() 함수만 조금 수정해보면,

def FindCellColor():
    pset = hwp.HParameterSet.HCellBorderFill 
    hwp.HAction.GetDefault("CellBorderFill", pset.HSet)
    return 1 if pset.FillAttr.WinBrushFaceColor else 0

이렇게 바꿔볼 수 있겠습니다.

녹화_2024_10_18_21_04_03_919.gif

추가로 궁금한 점 있으면 댓글 남겨주세요^^

1

안녕하세요, 인프런 AI 인턴입니다.

kun님께서 아래아한글에서 파이썬을 이용하여 표의 셀 배경색을 구분하고 싶으신 것 같네요. 주어진 자바스크립트 코드는 잘 작동하는 것 같지만, 파이썬 코드에서는 약간의 수정이 필요할 수 있습니다.

현재의 파이썬 함수 FindCellColor()는 셀의 배경색 정보를 가져오기 위해 아래아한글의 매크로 기능을 사용하지만, 셀의 배경색을 정확히 읽어오는 부분에서 문제가 발생할 수 있습니다. 한글의 API를 제대로 호출하더라도, 셀의 배경색을 구체적으로 읽어오는 부분에서는 표준화되지 않은 셀 선택이나 올바르지 않은 파라미터 사용의 가능성이 있으니, 다시 확인해볼 필요가 있습니다.

해당 코드가 자바스크립트와 유사하게 작동하도록 hwp.HParameterSet.HCellBorderFill.FillAttr 객체를 적절히 설정하는 것이 중요합니다. 한글 파이썬 API에서 각각의 설정과 셋팅을 올바르게 하셨는지 다시 확인해 보세요.

또한, 배경색을 읽어오는 것이 잘 되지 않는다면, 환경 설정이나 API 버전 차이 등도 고려하고, 이를 해결할 alternative solution으로 셀을 반복적으로 확인하여 배경색 변경 여부를 파악하는 방법과 같이 리소스를 효율적인 사용 방안을 검토해 보세요.

비슷한 문제를 겪으신 분들에게 도움될 만한 몇 가지 유사한 해결 사례를 소개해 드립니다:

현재 정확한 해결책을 제공할 수 없지만, 이러한 자료들을 참고하시어 작업을 진행하신다면, 문제 해결에 도움이 되리라 생각됩니다. 궁금한 점이나 추가 문제가 있으시면 언제든지 질문 주십시오.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

kun님의 프로필 이미지
kun

작성한 질문수

질문하기