스크립트 매크로 정의(녹화)를 통해 메일머지를 매크로 코드 자동생성후 매크로를 실행하면 시트 선택과 주소록 레코드 선택 다이얼로그가 나타나는데 해당 선택도 코드로 설정하여 다이얼로그가 나타나지 않게 할 수 없는지요?
해당 다이얼로그때문에 완전한 자동화를 할 수 없어 문의드립니다. 감사합니다.
아래 자동생성된 매크로 코드는 맨처음의 메일머지 만들기 다이얼로그에만 해당되는 것 같습니다.
그려면 한글 오토메이션의 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();
...
저도 안될 것이라 생각하면서 혹시나 해서 문의드렸는데 예상대로 메일머지를 완전 자동화하는 것은 현재로서는 안되나봅니다. 그래도 한컴의 전문가분께서 신속하고 상세하게 설명해주신 덕분에 메일머지 완전 자동화에 더이상 시간을 들이지 않고 말씀하신대로 누름틀 등 다른 대안을 이용하는 방법으로 접근해보겠습니다. 다시 한번 신속하고 상세한 답변에 감사드립니다.