강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của cctomoyo9249
cctomoyo9249

câu hỏi đã được viết

Công thức tự động hóa Python-아래아한글 cần thiết cho nhân viên văn phòng

Ngày tháng theo sau ngày trong tuần

날짜 뒤에 요일 붙이기가 작동이 안되네요

Đã giải quyết

Viết

·

114

1

안녕하세요. 날짜 뒤에 요일 붙이기 코드가 작동이 되지 않아서 문의 드립니다. 제가 손코딩 한게 뭔가 오류가 있나 싶어서 강의에 있는 코드를 복붙해서 실행해봐도 아무런 변화가 없네요.

한글 파일은 자료다운에서 받은 실작업공정표를 사용했고 한글 2022, 한글 2024 두가지 버전 모두 아무런 변화가 없습니다ㅠㅠ

 

import os
import datetime as dt

import win32com.client as win32

def init_hwp():
    hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
    hwp.XHwpWindows.Item(0).Visible = True
    hwp.RegisterModule("FilePathCheckDLL", "FileCheckerModule")
    return hwp

hwp = init_hwp()
hwp.Open(os.path.join(os.getcwd(),r"C:\Users\cctom\Desktop\python\hwp2python\실작업공정표.hwpx"))

# date().weekday() : 월화수목금토일
#                     0 1 2 3 4 5 6


def get_value():
    hwp.InitScan(Range=0xff)  # 추출범위를 "선택영역"으로 지정
    text = hwp.GetText()[1]  # 선택범위 문자열값 추출
    hwp.ReleaseScan()  # 검색종료
    return text  # 추출값 리턴


def get_weekday(text):
    week_list = ["월", "화", "수", "목", "금", "토", "일"]
    month, day = [int(i) for i in text.split(".")[:2]]
    week_num = dt.date(2022, month, day).weekday()
    week_day = week_list[week_num]
    return f"({week_day})"


def insert_text(text):
    act = hwp.CreateAction("InsertText")
    pset = act.CreateSet()
    pset.SetItem("Text", text)
    act.Execute(pset)


if __name__ == '__main__':
    hwp.FindCtrl()  # 표 선택
    hwp.Run("ShapeObjTableSelCell")  # 첫 번째 셀로 진입(셀선택상태)
    while True:  # 무한반복
        text = get_value()  # 셀의 텍스트 추출
        if text.endswith("."):  # 셀 안의 텍스트가 "."으로 끝나면(날짜셀을 구분하는 임의의 방법)
            weekday = get_weekday(text)  # 요일 파악
            hwp.Run("Cancel")  # 셀선택 취소
            hwp.Run("MoveLineEnd")  # 문자열 끝으로 이동
            insert_text(weekday)  # 요일 삽입
            hwp.Run("TableCellBlock")  # 다시 셀선택
        if not hwp.HAction.Run("TableRightCell"):  # 우측으로 이동하다
            break  # 끝에 도달하면 while문 종료
python한컴오피스

Câu trả lời 2

2

ilco님의 프로필 이미지
ilco
Người chia sẻ kiến thức

제가 답변이 늦었습니다...

예전에는 hwp.FindCtrl()을 실행하면, 멀리 있는 컨트롤도 선택했던 것 같은데,

지금은 조판부호에 붙어있지 않으면 선택하는 않는 방식으로 업데이트가 되었나봅니다^^;

(기억이 가물가물하네요...ㅜㅜㅜ 아이고)

그래도 예전 hwp.FindCtrl()의 기능을

(거의 동일하게) hwp.HAction.Run("SelectCtrlFront")로 사용할 수 있는 듯 합니다.

한컴 개발자 포럼의 개발자 분들도 대부분의 답변에서
FindCtrl보다는 SelectCtrlFront를 추천해주고 계신데요.

FindCtrl은 커서 좌측에 컨트롤이 있으면 그걸 선택해버리는 반면
SelectCtrlFront는 무조건 우측이나 아래로,
그리고 SelectCtrlPrev는 무조건 좌측이나 위쪽 방향으로
컨트롤을 찾아가기 때문에 FindCtrl에 비해 오류발생 가능성이 현저히 적어 보입니다.

녹화_2024_12_18_20_47_53_339.gif

 

그냥 마치기는 좀 죄송해서,

단순한 예제이긴 하지만 pyhwpx 모듈과 정규식으로도 동일 예제를 짜본 코드도 보여드려봅니다.

녹화_2024_12_18_21_52_45_108.gif
import datetime as dt

from pyhwpx import Hwp


def get_weekday(text):
    week_list = ["월", "화", "수", "목", "금", "토", "일"]
    month, day = [int(i) for i in text.split(".")[:2]]
    week_num = dt.date(2022, month, day).weekday()
    week_day = week_list[week_num]
    return f"({week_day})"

hwp = Hwp()
hwp.Open(r"C:\Users\Administrator\Desktop\실작업공정표.hwpx")

hwp.MoveDocBegin()
while hwp.find(r"\d+\.\d+\.", regex=True):
    date = hwp.get_selected_text()
    hwp.insert_text(date + get_weekday(date))

 

항상 자답 남겨주셔서 감사하고 죄송하고 그렇습니다.

행복한 하루 되세요^^

cctomoyo9249님의 프로필 이미지
cctomoyo9249
Người đặt câu hỏi

자세히 답변 달아주셔서 감사합니다^^ 날씨가 많이 추운데 감기 조심하시고 즐거운 하루 보내세요~^^

1

cctomoyo9249님의 프로필 이미지
cctomoyo9249
Người đặt câu hỏi

밑에 질문에 답해주신 내용 보고 해결했습니다.

매번 자문자답이 되네요ㅜㅠ

hwp.FindCtrl()을 사용하지 않고 hwp.HAction.Run("SelectCtrlFront")를 사용하니까 잘 실행 되었습니다.

한글이 업데이트 되면서 내부적으로 변경이 계속 생기나보네요ㅠㅠ

Hình ảnh hồ sơ của cctomoyo9249
cctomoyo9249

câu hỏi đã được viết

Đặt câu hỏi