output 타입 파라미터(DataSet result, string resultDataMember)로 결과를 참조
Parameters
string emmId : 엑셀 메일머지 ID
Dictionary<string, object> queryParams : 데이터 조회시 필요한 파라미터 정보
out DataSet result : 쿼리 실행 결과 DataSource
out string resultDataMember : 쿼리 실행 결과 DataMember
Returns
bool : 조회에 실패시 false
public static bool ExecuteQuery(string emmId, Dictionary<string, object> queryParams, out DataSet result, out string resultDataMember);
RetrieveDocuments
이전 버전의 "RetrieveDocumentInfo"
엑셀 메일머지 출력물 리스트를 반환
Parameters
string documentId : 엑셀 메일머지 출력물 ID (데이터 검색 조건)
string documentName : 엑셀 메일머지 출력물 이름 (데이터 검색 조건)
string emmId : 엑셀 메일머지 ID (데이터 검색 조건)
Returns
DataTable : 쿼리 실행 결과
필드
타입
document_id
string
엑셀 메일머지 출력물 ID
document_name
string
엑셀 메일머지 출력물 이름
remarks
string
비고
screenshot
byte[]
엑셀 메일머지 출력물의 스크린샷 이미지
emm_id
string
엑셀 메일머지 ID
form_id
string
폼 ID
menu_name
string
메뉴명
document_type
string
출력물 등록 유형 ("Default" or "General")
public static DataTable RetrieveDocuments();
public static DataTable RetrieveDocuments(string documentId, string documentName, string emmId);
ShowPrintDialog
엑셀 메일머지 ID(emmId)로 등록된 전체 출력물 리스트를 조회하는 팝업을 열고, 선택하여 미리보기 또는 인쇄 실행
Parameters
string emmId : 엑셀 메일머지 ID
Dictionary<string, object> queryParams : 데이터 조회시 필요한 파라미터 정보
Returns
DialogResult : 정상적으로 출력 신호를 보내면 DialogResult.OK 반환
public static DialogResult ShowPrintDialog(string emmId, Dictionary<string, object> queryParams);
Example
case 1
일반적인 방법 (데이터가 바인딩된 메일머지 출력물에 별도의 처리를 하지 않음)
try
{
var paramDatas = new Dictionary<string, object>();
paramDatas.Add("@p_itemcd", "0304203B0070000500C");
ExcelMailMergeHelper.Preview("TEST_01", paramDatas);
}
catch (Exception ex)
{
ShowErrorMessageBox(ex);
}
case 2
메일머지 데이터가 바인딩된 출력물 개체(IWorkbook)를 반환받아 가공하여 인쇄
ex) Spreadsheet 그리기 옵션 및 셀 병합 등
try
{
var paramDatas = new Dictionary<string, object>();
paramDatas.Add("@p_itemcd", "0304203B0070000500C");
var document = ExcelMailMergeHelper.GenerateMailMergeDocument("DWG_01", paramDatas);
//
//// 여기에 엑셀 문서 수정
//Worksheet mainSheet = document.Worksheets[0];
//
ExcelMailMergeHelper.Preview(document);
}
catch (Exception ex)
{
ShowErrorMessageBox(ex);
}
case 3
엑셀 메일머지 설정 정보를 참조하여 데이터 조회 결과만을 반환 받아 DataColumn, DataRow를 추가하는 등의 작업을 거친 후 메일머지 바인딩 후 인쇄
ex) QR코드 이미지 추가 등
아래 예제 코드에서는 "QRCoder.dll" 어셈블리를 참조
try
{
var paramDatas = new Dictionary<string, object>();
paramDatas.Add("@p_itemcd", "0304203B0070000500C");
if (!ExcelMailMergeHelper.ExecuteQuery("TEST_01", paramDatas, out DataSet result, out string dataMember))
return;
if ((result?.Tables?.Count ?? 0) > 0)
{
var qrGenerator = new QRCodeGenerator();
result.Tables[0].Columns.Add("qrcode", typeof(Image));
foreach (DataRow row in result.Tables[0].Rows)
{
QRCode qrCode = new QRCode(qrGenerator.CreateQrCode(row["itemcd"].ToString(), QRCodeGenerator.ECCLevel.Q));
row["qrcode"] = qrCode.GetGraphic(20);
}
}
// 방법 1) 가공된 DataSource를 바로 출력물 미리보기 형태로 실행
ExcelMailMergeHelper.Preview("TEST_01", result, dataMember);
// 방법 2) DataSource를 메일머지 바인딩한 문서 개체를 받아와 다시 가공 후 미리보기로 실행
var document = ExcelMailMergeHelper.GenerateMailMergeDocument("TEST_01", result, dataMember);
//
//// 여기에 엑셀 문서 수정
//Worksheet mainSheet = document?.Worksheets?.FirstOrDefault();
//
ExcelMailMergeHelper.Preview(document);
}
catch (Exception ex)
{
ShowErrorMessageBox(ex);
}
case 4
첨부파일로 등록된 이미지나 PDF 파일을 확인하여, 조회된 엑셀 출력물에 다음 페이지로 등록
PdfDocumentProcessor (어셈블리 DevExpress.Docs.v22.1)
public override void ClickPreviewButton()
{
ExcelMailMergeHelper.Preview(CreatePrintout());
}
public override void ClickPrintButton()
{
ExcelMailMergeHelper.Print(CreatePrintout());
}
private IWorkbook CreatePrintout()
{
if (gvwList.FocusedRowHandle < 0)
{
ShowMessageBox(Messages.NoDataSelected);
return null;
}
Dictionary<string, object> paramDatas = new Dictionary<string, object>();
paramDatas.Add("@p_orgdiv", Config["orgdiv"]);
paramDatas.Add("@p_datnum", txtDatnum1.Text);
paramDatas.Add("@p_login_user", Config.UserId);
try
{
IWorkbook mainWorkbook = ExcelMailMergeHelper.GenerateMailMergeDocument("QC_A4000", paramDatas);
mainWorkbook.Unit = DevExpress.Office.DocumentUnit.Millimeter;
// 첨부파일 정보 조회
string query = $@"
SELECT saved_name, original_name
FROM sysAttachments
WHERE attdatnum = '{txtAttdatanum.Text}'";
DataTable attachDatas = ExecuteSql(query, false)?[0];
// 이미지 파일 처리
var images = new List<Image>();
if ((attachDatas?.Rows?.Count ?? 0) > 0)
{
foreach (DataRow row in attachDatas.Rows)
{
string savedName = row.GetValue("saved_name")?.ToString() ?? string.Empty;
string originalName = row.GetValue("original_name")?.ToString() ?? string.Empty;
bool isImageFile = Util.IsRecognisedImageFile(originalName);
byte[] fileBytes = null;
Image image = null;
// 이미지 or PDF 파일만 등록
if (isImageFile || Path.GetExtension(originalName).Equals(".pdf", StringComparison.OrdinalIgnoreCase))
{
if (isImageFile)
{
fileBytes = AttachmentHelper.DownloadFile(savedName);
using (MemoryStream ms = new MemoryStream(fileBytes))
{
image = Image.FromStream(ms);
}
}
else
{
var fileBytesOfPdf = AttachmentHelper.DownloadFile(savedName); ;
using (MemoryStream stream = new MemoryStream(fileBytesOfPdf))
{
PdfDocumentProcessor processor = new PdfDocumentProcessor();
processor.LoadDocument(stream);
image = processor.CreateBitmap(1, 1000);
fileBytes = image.ConvertImageToByteArray();
processor.CloseDocument();
}
}
images.Add(image);
}
}
}
foreach (Image image in images)
{
if (image == null)
continue;
Worksheet newWorksheet = mainWorkbook.Worksheets.Add();
newWorksheet.ActiveView.Margins.Top = 12F;
newWorksheet.ActiveView.Margins.Bottom = 12F;
newWorksheet.ActiveView.Margins.Left = 6F;
newWorksheet.ActiveView.Margins.Right = 6F;
CellRange range;
// 용지 가로 설정
if (image.Width > image.Height)
{
range = newWorksheet["A1:O36"];
newWorksheet.ActiveView.Orientation = PageOrientation.Landscape;
}
// 용지 세로 설정
else
{
range = newWorksheet["A1:L48"];
newWorksheet.ActiveView.Orientation = PageOrientation.Portrait;
}
newWorksheet.SetPrintRange(range);
// 이미지 추가
Picture picture = newWorksheet.Pictures.AddPicture(image, range, true);
// 이미지 가운데로 이동
float offsetX = (float)((range.ColumnWidth * range.ColumnCount) - picture.Width) / 2F;
float offsetY = (float)((range.RowHeight * range.RowCount) - picture.Height) / 2F;
picture.Move(offsetY, offsetX);
}
return mainWorkbook;
}
catch (Exception ex)
{
ShowErrorMessageBox(ex);
WaitFormEx.Close();
return null;
}
}