표에서 캡션 내용 가져오기

안녕하세요.

표에 캡션이 있는 경우 그 내용을 가져오기 위해
표에 캡션이 있는지를 판단하는 코드를 먼저 실행해 봤습니다.
그림에서와 같이 가운데 표는 캡션이 없는데도
(보통 이전 표의 값 그대로를) 리턴합니다.

그림의 경우 캡션이 있는지 판단하는게 비교적 수월했는데..
표는 그 방법을 알 수가 없어 요청을 드립니다.

function OnScriptMacro_script16()
{
	var myCtrl = HeadCtrl;
	while (myCtrl)
	{
		if (myCtrl.CtrlID == "tbl")
		{
			SetPosBySet(myCtrl.GetAnchorPos(0));
			FindCtrl();
			HAction.GetDefault("TablePropertyDialog", HParameterSet.HShapeObject.HSet);

			switch(HParameterSet.HShapeObject.ShapeCaption.Side)
			{
				case SideType("Left"):
					XHwpMessageBox.String = "left";
					XHwpMessageBox.DoModal();
					break;
				case SideType("Right"):
					XHwpMessageBox.String = "right";
					XHwpMessageBox.DoModal();
					break;
				case SideType("Top"):
					XHwpMessageBox.String = "top";
					XHwpMessageBox.DoModal();
					break;
				case SideType("Bottom"):
					XHwpMessageBox.String = "bottom";
					XHwpMessageBox.DoModal();
					break;
			}
		}
	myCtrl = myCtrl.Next;
	}
}

Animation

1개의 좋아요

안녕하세요

HParameterSet.HShapeObject.HSet은 전역 변수라 계속 재활용 됩니다. SetID가 있을 경우에만 덮어 쓰여지는 구조로 되어 있습니다. 따라서 2번 째 표는 ShapeCaption가 없어서 기존에 있던 ShapeCaption을 가져오게 되어 있습니다.

제 생각에는 해결 방안은 ParameterSet을 변수로 만들어 GetDefault를 하는 방법과
메세지 박스를 띄우는 동작 이후에 HParameterSet.HShapeObject.ShapeCaption.Side 값을 강제로 바꾸면 동작할 것 같습니다.

아래 코드는 HParameterSet.HShapeObject.ShapeCaption.Side 값을 강제로 바꿔서 해봤고 정상동작했습니다. 참고 하시면 좋을 것 같습니다.

감사합니다.

function OnScriptMacro_script16()
{
	var myCtrl = HeadCtrl;
	while (myCtrl)
	{
		if (myCtrl.CtrlID == "tbl")
		{
			SetPosBySet(myCtrl.GetAnchorPos(0));
			FindCtrl();
			HAction.GetDefault("TablePropertyDialog", HParameterSet.HShapeObject.HSet);

			switch(HParameterSet.HShapeObject.ShapeCaption.Side)
			{
				case SideType("Left"):
					XHwpMessageBox.String = "left";
					XHwpMessageBox.DoModal();
					break;
				case SideType("Right"):
					XHwpMessageBox.String = "right";
					XHwpMessageBox.DoModal();
					break;
				case SideType("Top"):
					XHwpMessageBox.String = "top";
					XHwpMessageBox.DoModal();
					break;
				case SideType("Bottom"):
					XHwpMessageBox.String = "bottom";
					XHwpMessageBox.DoModal();
					break;
			}

            with (HParameterSet.HShapeObject){
			ShapeCaption.Side = 0xFF
			}
            
		}
	myCtrl = myCtrl.Next;
	}
}
2개의 좋아요

설명과 해결 방법 모두 감사드립니다.
알려 주신 방법을 활용하니 잘 됩니다.

1개의 좋아요