메일머지 자동화 관련 문의

스크립트 매크로 정의(녹화)를 통해 메일머지를 매크로 코드 자동생성후 매크로를 실행하면 시트 선택과 주소록 레코드 선택 다이얼로그가 나타나는데 해당 선택도 코드로 설정하여 다이얼로그가 나타나지 않게 할 수 없는지요?
해당 다이얼로그때문에 완전한 자동화를 할 수 없어 문의드립니다. 감사합니다.

아래 자동생성된 매크로 코드는 맨처음의 메일머지 만들기 다이얼로그에만 해당되는 것 같습니다.

function OnScriptMacro_script8()
{
	HAction.GetDefault("MailMergeGenerate", HParameterSet.HMailMergeGenerate.HSet);
	with (HParameterSet.HMailMergeGenerate)
	{
		Input = 2;
		Output = 2;
		FileName = "C:\\Temp\\테스트.hwp";
		PrintSet.Collate = 1;
		PrintSet.UserOrder = 0;
		PrintSet.PrintToFile = 0;
		PrintSet.UsingPagenum = 1;
		PrintSet.ReverseOrder = 0;
		PrintSet.Pause = 0;
		PrintSet.PrintImage = 1;
		PrintSet.PrintDrawObj = 1;
		PrintSet.PrintClickHere = 0;
		PrintSet.PrintAutoFootnoteLtext = "^f";
		PrintSet.PrintAutoFootnoteCtext = "^t";
		PrintSet.PrintAutoFootnoteRtext = "^P쪽 중 ^p쪽";
		PrintSet.PrintAutoHeadnoteLtext = "^c";
		PrintSet.PrintAutoHeadnoteCtext = "^n";
		PrintSet.PrintAutoHeadnoteRtext = "^p";
		PrintSet.PrintFormObj = 1;
		PrintSet.PrintMarkPen = 0;
		PrintSet.PrintMemo = 0;
		PrintSet.PrintMemoContents = 0;
		PrintSet.PrintRevision = 1;
		PrintSet.PrintBarcode = 1;
		PrintSet.PrintPronounce = 0;
		Subject = "";
		NxlPath = "C:\\Temp\\테스트.xlsx";
		Field = "";
	}
	HAction.Execute("MailMergeGenerate", HParameterSet.HMailMergeGenerate.HSet);
}

캡처1

1개의 좋아요

안녕하세요.

메일 머지 기능은 스프레트시트의 시트탭을 선택하는 대화상자가 떠서 완전 자동화는 어려울 것 같습니다. :sob:
대신에 한글 오토메이션이나 웹한글기안기 솔루션에서 필드를 이용해서 자동화하는 일반적인 방법을 소개해드립니다.

한글에서는 표의 셀, 글상자, 누름틀에 필드 이름을 지정할 수가 있습니다.
그래서 자동화를 하고자 하는 양식 문서에 위의 문서 요소를 삽입하여 만듭니다.
예를 들어서 아래와 같이 누름틀을 삽입하고

누름틀에 필드명을 지정합니다.



그려면 한글 오토메이션의 PutFieldText API를 통해 지정한 필드에 데이터를 삽입할 수가 있습니다.
예제 코드로 작성한다면

양식 문서를 열고 데이터를 입력해서 인쇄를 반복하는 예제 (C++)
void CTest::TestFunction() 
{
	// 엑셀/한셀 오토메이션 API를 통해 데이터를 가져오는 방법 대신에 임의로 데이터를 정의함
	struct ExcelData {
		WCHAR szName[100];
		WCHAR szContact[100];
		WCHAR szAddress[100];
	} datalist[3] = {
		{ L"철수", L"010-1111-1111", L"서울" },
		{ L"영희", L"010-2222-2222", L"경기도" },
		{ L"길동", L"010-3333-3333", L"인천" },
	};

	// 문서 열기
	m_app.Open(L"c:\\테스트.hwpx", COleVariant(L""), COleVariant(L""));
	
	int cnt = _countof(datalist);
	for (int i = 0; i < cnt; i++) {
		// 누름틀에 데이터 넣기
		m_app.PutFieldText(L"이름", datalist[i].szName);
		m_app.PutFieldText(L"연락처", datalist[i].szContact);
		m_app.PutFieldText(L"주소", datalist[i].szAddress);

		// 인쇄 하기
		// 주의 : 인쇄 옵션과 인쇄 드라이브 설정은 다를 수 있음!!
		CDHwpAction action = m_app.CreateAction(L"Print");
		CDHwpParameterSet set = action.CreateSet();
		action.GetDefault(set);
		set.SetItem(L"PrinterName", COleVariant(L"SINDOH uPrint Driver"));
		action.Execute(set);
	}

	// 문서 닫기 (1 : 수정 내용 취소)
	m_app.Clear(COleVariant((long)1));
}

추가로 스프레드시트 문서에서 데이터를 가져오는 방법은 MS의 엑셀이나 한컴오피스의 한셀의 오토메이션 API를 활용할 수 있을 것 같습니다. (혹은 아파치 POI와 같은 오픈소스 라이브러리)
데이터를 가져오는 방법은 검색을 통해 알 수 있기 때문에 자세한 설명은 생략합니다.

// 한셀의 경우에는 app.CreateDispatch("HCell.Application"); 이다.
CApplication excel = app.CreateDispatch("Excel.Application"); 
excel. get_Workbooks();
...


해보시면서 안되는 부분이 있으면 다시 문의 남겨주세요.
감사합니다. :grinning:

2개의 좋아요

저도 안될 것이라 생각하면서 혹시나 해서 문의드렸는데 예상대로 메일머지를 완전 자동화하는 것은 현재로서는 안되나봅니다. 그래도 한컴의 전문가분께서 신속하고 상세하게 설명해주신 덕분에 메일머지 완전 자동화에 더이상 시간을 들이지 않고 말씀하신대로 누름틀 등 다른 대안을 이용하는 방법으로 접근해보겠습니다. 다시 한번 신속하고 상세한 답변에 감사드립니다.

1개의 좋아요