본문 바로가기

Develop/Tips

UltraGrid의 Excel Export for Multi Header

infragistics의 grid인 UltraGrid의 내용을 Excel로 다운을 받을 수 있습니다.

이건 문제도 아닙니다.. 아주 단순하게 UltraWebGridExcelExporter 를 사용하면 아주 간단하게 처리 됩니다.

Asp.net의 Design Page 에서 UltraWebGridExcelExporter 콘트롤을 drag & drop 을 하고

Button을 하나 만들어서 UltraWebGridExcelExporter 클래스의 Export 함수를 호출해서 파라메터로 UltraWebGrid 콘트롤을 넘기면 됩니다.

그러나 이렇게 했을 때 문제는 Grid의 Header가 2줄 이상이었을 때 Export 만으로 Multi Header를 만들어 주지 않습니다.

예를 들어

 

이런 헤더를 Excel 에서 볼 수 없다. 아래에 있는 실제 column 정보만 나오게 됩니다.

Multi Header 의 작업을 하기 위해서는 일반적으로 다른 콘트롤 즉 DataGrid 를 사용하여 RenderControl 함수를 사용 실제 Excel 페이지를 만들어서 써야 합니다.. 이것도 얼마나 괴로운 작업인가요... 케에에엑~~~!!!


그나마 UltraGrid를 그대로 사용하면서 UltraWebGridExcelExporter 를 사용하여 멀티해더를 좀 억지로 구현을 했습니다.

사용한 객체는 Infragistics.WebUI.UltraWebGrid.ExcelExport.BeginExportEventArgs 를 사용했습니다.

보면 알겠지만 BeginExportEvent 를 사용한 것입니다.

이 객체의 CurrentWorksheet를 사용했습니다.

셈플소스 방식은

_ultraExcelExportBeginEvnt.CurrentWorksheet.Row[0].Cell[0].Value = "입력할 값";

이 것으로 일단 Excel 의 원하는 곳에 값을 입력할 수 있습니다.

그리고는 폰트 색이며 라인 등.. 그리는 과정을 반복하게 됩니다.

그러나 실제 그렇게 많은 멀티라인은 존재하지 않기 때문에 코딩이 아무래도 일일이 만드는 것보다는 훨씬 적게 듭니다.

Multi header 를 구현하면 위쪽에 해더가 없는.. 즉.

"D" 같은 column과 "그룹헤더"를 볼 수 있습니다. 이런 column은 MergedCellsRegions 를 사용하여 병합 시킵니다.

_ultraExcelExportBeginEvnt.CurrentWorksheet.MergedCellsRegions.Add( 시작 Row , 시작 Column , 종료 Row , 종료 Column );

로 셀 병합이 가능합니다.


색을 칠하는 것도 문제가 됩니다.. 각 RowCell 마다 CellFormat 이 존재하고 CellFormatFillPatternSolid 로 맞춰

FillPatternForegroundColor 를 변경함으로써 색을 변경하였습니다..

라인은 LeftBorderColor LeftBorderStyle 로 각각 라인과 색을 맞추었습니다..


이로써 UltraWebGridExcelExporter 로 멀티해더를 구현했습니다.


해놓고 보면 아무것도 아닌것인데 어떻게든 코드 수를 줄일 방법과 좀더 명시적인 방법을 찾다 보니 이렇게 되었습니다..

검색해서도 답이 나오지 않고 검증된 것도 없어 결국 삽질로…

예로 그냥 단순히 "멀티헤더를 못해요! 따로 만드세요"라는 영문으로 된 사이트를 볼수 있었습니다.

누군가 질문글을 올려놓은 것도 보았는데 답이 없었습니다.


혹시 이렇게 하는 것보다 쉽게 하는 방법이 존재한다면 좀 알려주세요.