{"TYPE":"Single","MTX_MODULE_INFO":[{"MODULE_CODE":"MODE1CE5862990FC46FE59CA038468C632B","MODULE_SUBJECT":"데이터 그리드 선택 영역만 엑셀로 내보내기","USE_AUTHORITY":"0","EDIT_AUTHORITY":"-1","MODULE_DESCRIPTION":"데이터그리드에서 선택한 영역만 엑셀로 내보내기합니다.\n데이터그리드의 선택영역을 SingleRange로 설정합니다.","SCRIPT_TEXT":"var grid = Matrix.getObject(arguments[0]);\nvar btn = Matrix.getObject(arguments[1]);\n\nvar colIndex = [\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\"]; // 엑셀 열 배열\n\ngrid.ClearSelect(); // 선택 영역 초기화\n\n// 선택된 영역 있는 경우, 우클릭 메뉴 추가 : '선택 영역 엑셀로 내보내기'\ngrid.OnGridContextMenuOpening = function(s, e){\n\tif(grid.GetSelectedRows().length > 0 ) {\n\t\te.Menu.AddMenu(\n\t\t\t{\n\t\t\t\tid: 'SelectExport',\n\t\t\t\tname: '선택 영역 엑셀로 내보내기',\n\t\t\t\tparentId: 'export',\n\t\t\t\timg: null\n\t\t\t},\n\t\t\tfunction(){\n                   EXPORT_SELECTED_RANGE();\n            }\n\t\t);\n\t}\n};\n\nbtn.OnClick = function(s, e) {\n    EXPORT_SELECTED_RANGE();\n};\n\n// 선택된 영역 엑셀로 내보내기 함수\nvar EXPORT_SELECTED_RANGE = function(){\n \t// 선택된 영역이 있는 경우\n\tif(grid.GetSelectedRows().length > 0) {\n\t\tvar selectCells\t  = grid.GetSelectedCells(); //현재 선택된 셀의 목록을 반환\n\t\tvar selectRows\t  = grid.GetSelectedRows();\t //현재 선택된 행의 목록을 반환\n\t\tvar selectColsLen = parseInt(selectCells.length) / parseInt(selectRows.length); // 선택된 영역 필드 개수\n\t\t\n\t\tvar selectArr \t\t= [];\t// 이차원 배열의 반환 Array\n\t\tvar exportRange \t= [];\t// 엑셀에 출력할 객체 Array\n\t\tvar exportColsWidth = []; \t// 엑셀에 출력할 컬럼 너비 Array\n\t\tvar exportStyle \t= []; \t// 엑셀에 출력할 스타일 Array\n\t\t\n\t\t// 헤더 스타일 배열에 세팅\n\t\texportStyle.push({\"Border\":\"border-left:Thin,#c2c2c5;border-top:Thin,#c2c2c5;border-right:Thin,#c2c2c5;border-bottom:Thin,#c2c2c5;\",\"Fill\":\"solid,#FFF2F2F2\",\"Horizontal\":\"center\",\"Vertical\":\"center\",\"Name\":\"S0\"});\n\t\t\n\t\t// 선택한 영역 필드 이차원 배열에 세팅\n\t\tvar row = [];\n\t\tfor(var i=0; i<selectColsLen; i++) {\n\t\t\n\t\t\t// 1. 선택된 영역 필드 표시명 배열에 세팅\n\t\t\trow.push(selectCells[i].Column.Caption);\n\t\t\t\n\t\t\tvar pixelWidth = selectCells[i].Column.Width + 20;\n\t\t\tvar Width = (pixelWidth / 8).toFixed(3);\n\t\t\tvar HAlign = selectCells[i].Column.TextPosition;\n\t\t\t\n\t\t\t// 2. 선택된 영역 필드 너비 배열에 세팅\n\t\t\texportColsWidth.push({\"Index\":i+2,\"Width\":Width,\"PixelWidth\":pixelWidth});\n\t\t\t\n\t\t\t// 3. 선택된 영역 필드 스타일 배열에 세팅\n\t\t\tif(HAlign == \"start\") {\t// 왼쪽정렬\t\t\n\t\t\t\texportStyle.push({\"Border\":\"border-left:Thin,#c2c2c5;border-top:Thin,#c2c2c5;border-right:Thin,#c2c2c5;border-bottom:Thin,#c2c2c5;\",\"Horizontal\":\"left\",\"Vertical\":\"center\",\"Name\":\"S\" + (i+1)});\n\t\t\t}\n\t\t\telse if(HAlign == \"end\") { // 오른쪽정렬\n\t\t\t\texportStyle.push({\"Border\":\"border-left:Thin,#c2c2c5;border-top:Thin,#c2c2c5;border-right:Thin,#c2c2c5;border-bottom:Thin,#c2c2c5;\",\"Horizontal\":\"right\",\"Vertical\":\"center\",\"Name\":\"S\" + (i+1)});\n\t\t\t}\n\t\t\telse { // 가운데정렬\n\t\t\t\texportStyle.push({\"Border\":\"border-left:Thin,#c2c2c5;border-top:Thin,#c2c2c5;border-right:Thin,#c2c2c5;border-bottom:Thin,#c2c2c5;\",\"Horizontal\":\"center\",\"Vertical\":\"center\",\"Name\":\"S\" + (i+1)});\n\t\t\t}\n\t\t}\n\t\tselectArr.push(row); // 이차원 배열에 필드 표시명 배열 추가\n\t\trow = [];\n\t\t\n\t\t// 선택된 영역 데이터 이차원 배열에 세팅\n\t\tfor(var i=0; i<selectRows.length; i++) {\n\t\t\tvar row = [];\n\t\t\t\n\t\t\tfor(var j=0; j<selectColsLen; j++) {\n\t\t\t\trow.push(selectCells[i*selectColsLen + j].Value);\n\t\t\t}\n\t\t\tselectArr.push(row);\n\t\t}\n\t\t\n\t\t// 엑셀 출력 range 세팅\n\t\tfor(var i=0; i<selectArr.length; i++) {\n\t\t\tfor(var j=0; j<selectArr[0].length; j++) {\n\t\t\t\tif( i == 0 ) { // 헤더 지정\n\t\t\t\t\texportRange.push({\"Range\":colIndex[j] + (i + 4),\"Value\":selectArr[i][j], \"Style\" : \"S0\"});\t\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\texportRange.push({\"Range\":colIndex[j] + (i + 4),\"Value\":selectArr[i][j], \"Style\" : \"S\" + (j+1)});\n\t\t\t\t}\n\t\t\t}\n\t\t}\t\n\t\n\t\t//워크북에 데이터 출력\n\t\tvar WORKBOOK = {\n\t\t\t  \"FontName\"  : \"맑은 고딕\"\n\t\t\t, \"FontSize\"  : 11\n\t\t\t, \"Styles\"    : exportStyle\n\t\t\t, \"WorkSheets\": [\n\t\t\t\t{\n\t\t\t\t\t  \"Name\"     : \"Sheet1\"\n\t\t\t\t\t, \"Columns\"  : exportColsWidth\n\t\t\t\t\t, \"DisplayGridlines\" : \"false\"\n\t\t\t\t\t, \"Controls\" : []\n\t\t\t\t\t, \"Ranges\"   : exportRange\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\t\n\t\t// 엑셀 파일 내보내기\n\t\tMatrix.ExcelExportServiceCall(WORKBOOK ,null ,function(e){ \t  \n\t\t\tif(e.Success == false){\n\t\t\t\talert(\"export fail\" + e.Message);\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// download file\n\t\t\tvar row = e.DataSet.GetTable(0).GetRow(0);\n\t\t\tvar folderName = row.GetValue(\"FolderName\");\n\t\t\tvar fileName = row.GetValue(\"FileName\");\n\t\n\t\t\t// download.maf 주소\n\t\t\tMatrix.DownloadFile(folderName + \"/\"\n\t\t\t\t\t\t\t\t, fileName\n\t\t\t\t\t\t\t\t, Matrix.GetReportInfo().NAME + \"_\" + Matrix.getDateTime(\"yyyy-MM-dd HH:mm:ss\") + \".xlsx\", true, null);\n\t\t});\n\n\t}\n\t// 선택된 영역이 없는 경우\n\telse {\n\t\tMatrix.Information('선택된 영역이 없습니다.' ,'확인');\n\t\treturn;\n\t}\n};","MODULE_TYPE":"","RESULT_TYPE":"","ORIGINAL_MODULE_CODE":"","CREATE_USER":"matrix","MODIFY_USER":"matrix","MODULE_SEQ":"15","WF_YN":"","EVENT_YN":"N","ATTR1":"","ATTR2":"","ATTR3":"", "MTX_MODULE_PARAMS":[{"MODULE_CODE":"MODE1CE5862990FC46FE59CA038468C632B","PARAM_SEQ":"1","PARAM_TYPE":"INP003","NULLABLE":"N","PARAM_DESCRIPTION":"데이터그리드 선택","DEFAULT_VALUE":"","ATTR1":"","ATTR2":"","ATTR3":""},{"MODULE_CODE":"MODE1CE5862990FC46FE59CA038468C632B","PARAM_SEQ":"2","PARAM_TYPE":"INP004","NULLABLE":"Y","PARAM_DESCRIPTION":"내보내기 버튼 선택","DEFAULT_VALUE":"","ATTR1":"","ATTR2":"","ATTR3":""}]}]}