본문 바로가기
아래아한글 자동화/python+hwp 중급

[QnA] 표 너비 조절이 되지 않습니다.

by 일코 2022. 12. 9.
이전 버전까지는 정상적으로 사이즈가 정상적으로 반영되었는데
특정패치이후에 안됩니다.
일시적인 버근줄알았는데 2022까지 계속 이어지네요.
문서의 width, widthRelTo를 적용해봐도 동일하게 용지사이즈만큼 늘어납니다.

질문출처 : 한글과컴퓨터 - 개발자 커뮤니티

이런 문제들은 대체로

이런 문제들은 대체로 필요한 파라미터 몇 개가 빠져 있어서 생깁니다.

표 생성시 필요한 파라미터가 굉장히 많기도 하고요.

프로그램에서 표를 만들면 행, 열의 수만 입력하고 엔터를 치면 표가 만들어지지만

 

이 간단한 과정을 매크로로 녹화해보면 깜짝 놀라게 됩니다.

코드가 너무 길거든요.

 

1행1열의 표를 삽입하는 매크로는 아래와 같습니다.

function OnScriptMacro_중국어1성()
{
	HAction.GetDefault("TableCreate", HParameterSet.HTableCreation.HSet);
	with (HParameterSet.HTableCreation)
	{
		Rows = 1;
		Cols = 1;
		WidthType = 0;
		HeightType = 1;
		WidthValue = MiliToHwpUnit(148.0);
		HeightValue = MiliToHwpUnit(4.0);
		CreateItemArray("ColWidth", 1);
		ColWidth.Item(0) = MiliToHwpUnit(144.4);
		CreateItemArray("RowHeight", 1);
		RowHeight.Item(0) = MiliToHwpUnit(3.0);
		TableProperties.Width = 41954;
	}
	HAction.Execute("TableCreate", HParameterSet.HTableCreation.HSet);
}

 

그럼 위 코드와 질문자님의 코드와 비교를 해 볼까요?

질문자님의 CreateAction 기반 코드와 
스크립트매크로의 HAction 방식의 코드를 비교해봅시다.
사실 굉장히 달라 보입니다. 다른 언어로 작성된 스크립트인가 싶죠.
이 때문에 다소 불편한 부분이 있는 건 맞습니다.
하지만 액션이름이나, 파라미터셋의 이름, 프로퍼티 등은 거의 동일해요.
상호 참고하면서 코드를 변환하는 것도 가능해요. 번거롭긴 하지만요.

매크로에는 있는데, 질문자님의 코드에는 없는 라인이 두 줄 보입니다.

바로 WidthType 과 HeightType의 정의에 대한 라인이 없다는 건데요.

제가 녹화한 코드의 WidthType=0, HeightType=1이 어떤 의미인지

다시 한/글 프로그램을 살펴볼까요?

 

가운데 크기 지정 섹션의 너비 속성(단에 맞춤)과 높이(임의 값)를 뜻한다는 걸 짐작할 수 있습니다.

 

그럼 질문자님의 의도대로

너비도 임의 값, 높이도 임의 값으로 지정하려면 어떻게 해야겠죠?

둘 다 "임의값"으로 부여하면 됩니다.

임의값으로 놓고 다시 녹화해보겠습니다.

 

다시 아래와 같은 코드를 얻었습니다.

function OnScriptMacro_중국어1성()
{
	HAction.GetDefault("TableCreate", HParameterSet.HTableCreation.HSet);
	with (HParameterSet.HTableCreation)
	{
		Rows = 1;
		Cols = 1;
		WidthType = 2;  # <---
		HeightType = 1;  # <---
		WidthValue = MiliToHwpUnit(50.0);
		HeightValue = MiliToHwpUnit(50.0);
		CreateItemArray("ColWidth", 1);
		ColWidth.Item(0) = MiliToHwpUnit(46.4);
		CreateItemArray("RowHeight", 1);
		RowHeight.Item(0) = MiliToHwpUnit(49.0);
		TableProperties.Width = 14173;
	}
	HAction.Execute("TableCreate", HParameterSet.HTableCreation.HSet);
}

8번째 라인, WidthType이 0에서 2로 바뀌었네요.

 

그럼 WIdthType과 HeightType 둘 다 임의값으로 정의하고 코드를 한 번 실행해보겠습니다.

 

의도대로 잘 작동하네요.

 

저도 매뉴얼을 보고 작성한 코드가 원하는대로 작동이 잘 안 된다 싶을 때가 많이 있어요.

그럴 때는 위와 같은 방식을 사용합니다.

스크립트매크로와 비교해서 빠진 파라미터가 없는지 체크한다는 거지요.

사실 요즘은 가능하면 스크립트매크로를 먼저 녹화해요.
그걸 참고해서 액션 코드를 짜는 일이 더 많은 것 같네요.

 

도움이 되었기를 바랍니다.

 

댓글