XtraGrid 컨트롤 여러 개를 하나의 엑셀 통합문서에 각 시트를 추가해서 Export 하는 방법


DevExpress의 XtraGrid 컨트롤은 무척 다양하고 편리한 기능을 제공해 주는 윈폼 닷넷의 GridControl 입니다.
닷넷의 표준 Grid 컨트롤에 비해 월등한 기능을 제공해 주고 있습니다.

XtraGrid 컨트롤에 채워진 자료를 엑셀로 Export 해서 사용하는 경우도 많이 있는데 보통 XtraGrid 컨트롤 하나를 엑셀 통합문서 하나로 익스포트(Export) 하게 됩니다.

하나의 엑셀 통합문서에 여러 개의 시트로 서로 다른 XtraGrid 컨트롤을 Export 하려면 어떻게 하면 될까요?

이번 글에서는 XtraGrid 컨트롤 여러 개를 하나의 엑셀 통합문서에 각 시트를 추가해서 Export 하는 방법에 대해 알아보겠습니다.

하나의 엑셀 통합문서에 여러 시트로 나누어 XtraGrid를 Export 하는 방법 예제 화면

▼ 아래 엑셀 통합문서는 C# 윈폼에서 5개의 XtraGrid 컨트롤을 각각 시트 탭을 추가해서 하나의 엑셀 통합문서를 만든 결과 화면입니다.

  • Sheet1, Sheet2, Sheet3, Sheet4, Sheet5 각각의 이름으로 엑셀 시트가 만들어졌습니다.
XtraGrid 컨트롤 여러 개를 하나의 엑셀 통합문서에 각 시트를 추가해서 Export 하는 방법 1

▼ 시트 이름을 의미 있는 이름으로 지정해서 엑셀 통합문서를 만들 수 있습니다.

  • [고객별 주문현황], [영업사원별 판매현황], [매출현황], [재고자산현황], [지역별 판매현황] 이름으로 시트가 추가된 것을 볼 수 있습니다.
  • XtraGrid를 익스포트 해서 엑셀 통합문서를 만드는 시점에 각각의 시트 이름을 지정해 주면 사용자가 더욱 편리하게 사용할 수 있습니다.
XtraGrid 컨트롤 여러 개를 하나의 엑셀 통합문서에 각 시트를 추가해서 Export 하는 방법 2

엑셀 통합문서에 여러 시트로 나누어 XtraGrid를 Export 하는 실제 C# 프로그램 코드

▶ 앞 단락에서 보여준 엑셀 통합문서에 대한 실제 C# 닷넷 프로그램에서 만드는 소스 코드입니다.

  • 별도의 설명이 필요 없을 만큼 비교적 간단하게 처리가 가능합니다.
using DevExpress.XtraPrintingLinks;
using DevExpress.XtraPrinting;
 
private void btnExcelDown_Click(object sender, EventArgs e)
{
    // DataTable 선언 및 DataTable 채우기
    DataTable dataTable1 = new DataTable();
    DataTable dataTable2 = new DataTable();
    DataTable dataTable3 = new DataTable();
    DataTable dataTable4 = new DataTable();
    DataTable dataTable5 = new DataTable();
 
    // 5개의 XtraGrid 컨트롤에 DataTable을 각각 바인딩 함.
    gridControl1.DataSource = dataTable1;
    gridControl2.DataSource = dataTable1;
    gridControl3.DataSource = dataTable1;
    gridControl4.DataSource = dataTable1;
    gridControl5.DataSource = dataTable1;
 
    // 여기서부터 엑셀 통합문서 하나에 여러 개의 시트로 XtraGrid 컨트롤을 각각 Export 하는 방벙
 
    SaveFileDialog saveDialog = new SaveFileDialog();
    saveDialog.Filter = “Excel Workbook (*.xlsx)| *.xlsx”;
    saveDialog.Title = “Save Excel File”;
    saveDialog.FileName = “통합문서저장”;
    var retValue = saveDialog.ShowDialog();
 
    if (retValue == DialogResult.OK)
    {
        PrintingSystemBase ps = new PrintingSystemBase();
 
        PrintableComponentLinkBase link1 = new PrintableComponentLinkBase(ps);
        link1.Component = gridControl1;
 
        PrintableComponentLinkBase link2 = new PrintableComponentLinkBase(ps);
        link2.Component = gridControl2;
 
        PrintableComponentLinkBase link3 = new PrintableComponentLinkBase(ps);
        link3.Component = gridControl3;
 
        PrintableComponentLinkBase link4 = new PrintableComponentLinkBase(ps);
        link4.Component = gridControl4;
 
        PrintableComponentLinkBase link5 = new PrintableComponentLinkBase(ps);
        link5.Component = gridControl5;
 
        //엑셀 통합문서에 각각 워크시트를 추가해 좀.
        CompositeLinkBase cl = new CompositeLinkBase(ps);
        cl.PrintingSystemBase.XlSheetCreated += PrintingSystemBase_XlSheetCreated;    //시트 이름 정의
        cl.Links.AddRange(new object[] { link1, link2, link3, link4, link5 });
        cl.Landscape = true;
        cl.CreatePageForEachLink();
        cl.ExportToXlsx(saveDialog.FileName, new XlsxExportOptions() { ExportMode = XlsxExportMode.SingleFilePageByPage });
 
        ps.Dispose();
 
        //Open the file  
        Process.Start(saveDialog.FileName, null);
    }
}
 
// 시트 이름을 지정
private void PrintingSystemBase_XlSheetCreated(object sender, XlSheetCreatedEventArgs e)
{
    switch (e.Index)
    {
        case 0:
            e.SheetName = “고객별 주문현황”;
            break;
        case 1:
            e.SheetName = “영업사원별 판매현황”;
            break;
        case 2:
            e.SheetName = “매출현황”;
            break;
        case 3:
            e.SheetName = “재고자산현황”;
            break;
        case 4:
            e.SheetName = “지역별 판매현황”;
            break;
        default:
            break;
    }
}
 
  • PrintableComponentLinkBase 사용을 위해 using DevExpress.XtraPrintingLinks; 을 선언해 주었습니다.
  • PrintingSystemBase 사용을 위해 using DevExpress.XtraPrinting; 을 선언해 주었습니다.
  • 시트 이름을 각각 지정해 주기 위해서는 cl.PrintingSystemBase.XlSheetCreated += PrintingSystemBase_XlSheetCreated; 구문을 추가하고 이벤트 핸들을 지정해 주면 됩니다.

마무리

하나의 윈폼 화면에서 여러 개의 XtraGrid 컨트롤을 엑셀 파일로 익스포트(Export) 해야 하는 경우 각각 별도의 엑셀 파일로 Export 할 수도 있지만 하나의 통합 문서에 시트를 추가해서 Export 할 수도 있습니다.

업무 상황이나 작업 형태에 따라 적절한 방법으로 Export를 구현해 주면 사용자들이 좀 더 편리하게 사용할 수 있게 됩니다.

이상으로 XtraGrid 컨트롤을 Excel 형식으로 Export 할 때 하나의 엑셀 통합 문서에 여러 시트를 추가해서 한번에 Export 하는 방법에 대해 알아보았습니다.





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


답글 남기기