misExcel.xjs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Script type="xscript4.0"><![CDATA[/***************************************************************************************
  3. * System Name :
  4. * Job Name :
  5. * Creator :
  6. * Make Date : 2017-12-04
  7. * Description :
  8. *---------------------------------------------------------------------------------------
  9. * Modify Date Modifier Modify Description
  10. *---------------------------------------------------------------------------------------
  11. * 2017-06-19 Live Converter TF->XP
  12. *
  13. *---------------------------------------------------------------------------------------
  14. ****************************************************************************************/
  15. //=======================================================================================
  16. // Function
  17. //---------------------------------------------------------------------------------------
  18. /****************************************************************************************
  19. * Argument : N/A
  20. * Description : 엑셀파일 업로드
  21. ****************************************************************************************/
  22. function misfUploadExcel() {
  23. var objUploadexcel = frmf_getComponents("grd_uploadexcel");
  24. var objExcelcol = frmf_getComponents("grd_excelcol");
  25. var ds_uploadexcel = this.objects[objUploadexcel.binddataset];
  26. var ds_excelcol = this.objects[objExcelcol.binddataset];
  27. ds_uploadexcel.clear();
  28. ds_excelcol.clear();
  29. var fd = new FileDialog;
  30. var objExt = new ExtCommon();
  31. var file = fd.open("open", FileDialog.LOAD,"%MYDOCUMENT%");
  32. var lv_oDs;
  33. var lv_sDsNm = "ds_importExcel";
  34. var lv_Ret;
  35. // var objDsImport = eval(sDsName);
  36. var lv_nStRow = 0;
  37. if(file != undefined){
  38. file.open(VirtualFile.openRead | VirtualFile.openBinary);
  39. file.close();
  40. }else{
  41. return false;
  42. }
  43. try{
  44. lv_oDs = this.all[lv_sDsNm];
  45. }catch(e){}
  46. if(utlf_isNull(lv_oDs))
  47. {
  48. lv_oDs = new Dataset;
  49. lv_oDs.name = lv_sDsNm;
  50. this.addChild(lv_sDsNm,lv_oDs);
  51. }
  52. if(lv_oDs.rowcount > 0) lv_oDs.clear();
  53. objExt.excelImportByIndex(file.fullpath, 0, lv_sDsNm, false, 1, 0, 1);
  54. if(utlf_isNull(lv_oDs) || lv_oDs.rowcount < 1) return false;
  55. ds_uploadexcel.copyData(lv_oDs);
  56. var index = 0;
  57. for(var i = 0; i < ds_uploadexcel.colcount; i++){
  58. //if(utlf_isNull(ds_uploadexcel.getColumn(0, i))) continue;
  59. dsf_makeValue(ds_excelcol, "index", "string", index, i);
  60. dsf_makeValue(ds_excelcol, "name", "string", ds_uploadexcel.getColumn(0, i), index);
  61. objUploadexcel.setCellProperty("head",i,"text",ds_uploadexcel.getColumn(0, i));
  62. objUploadexcel.setCellProperty("body",i,"text","bind:"+ds_uploadexcel.getColID(i));
  63. index++;
  64. }
  65. ds_uploadexcel.deleteRow(0);
  66. return true;
  67. }
  68. // 업로드 된 엑셀 내용을 그리드에 셋팅한다.
  69. function misfReadExcel(tar_Grd, matCols, setCols) {
  70. var objUploadexcel = frmf_getComponents("grd_uploadexcel");
  71. var objExcelcol = frmf_getComponents("grd_excelcol");
  72. var ds_uploadexcel = this.objects[objUploadexcel.binddataset];
  73. var ds_excelcol = this.objects[objExcelcol.binddataset];
  74. var matColObj = misfSplitColSetting(matCols, false);
  75. var setColObj = misfSplitColSetting(setCols, true);
  76. if(matColObj == null) {
  77. alert("비교컬럼 설정에 오류가 있습니다.");
  78. return;
  79. }
  80. if(setColObj == null) {
  81. alert("셋팅컬럼 설정에 오류가 있습니다.");
  82. return;
  83. }
  84. var uploadNode = ds_uploadexcel;
  85. for (var rowIdx = 0; rowIdx < tar_Grd.rowcount; rowIdx++) {
  86. for(var nodIdx = 0; nodIdx < uploadNode.rowcount; nodIdx++){
  87. if(misfExcelCompare(tar_Grd, rowIdx, matColObj, uploadNode, nodIdx)) {
  88. var changeFlag = false;
  89. for(var k = 0; k < setColObj.length; k++) {
  90. var colIdx = tar_Grd.getBindCellIndex("body",setColObj[k].ref);
  91. if(tar_Grd.getCellProperty("body",colIdx,"edit") == "none") continue;
  92. var beforValue = tar_Grd.getCellValue(rowIdx, colIdx);
  93. var afterValue = uploadNode.getColumn(nodIdx, parseInt(setColObj[k].exRef));
  94. // trace(beforValue + ", " + afterValue);
  95. eval(tar_Grd.binddataset).setColumn(rowIdx, setColObj[k].ref, afterValue);
  96. if(beforValue != afterValue) {
  97. misfSetGridColor(tar_Grd, setColObj[k].ref, "#FF0000", "C" ,rowIdx);
  98. changeFlag = true;
  99. }
  100. }
  101. if(changeFlag) {
  102. fReadExcelCall_RowChange(tar_Grd, rowIdx);
  103. grdf_setStatus(tar_Grd, "U", [rowIdx]);
  104. }
  105. }
  106. }
  107. }
  108. }
  109. // 입력 된 컬럼 설정 파라메터를 객체로 변경
  110. function misfSplitColSetting(colString, skipNull) {
  111. var result = new Array();
  112. if(utlf_isNull(skipNull)) skipNull = false;
  113. var cols = colString.split("^");
  114. var objExcelcol = frmf_getComponents("grd_excelcol");
  115. var ds_excelcol = this.objects[objExcelcol.binddataset];
  116. for(var i = 0; i < cols.length; i++) {
  117. var splt = cols[i].split("=");
  118. if(utlf_isNull(splt) || splt.length != 2) return null;
  119. var colSet = new Object();
  120. colSet.ref = splt[0];
  121. colSet.colName = splt[1];
  122. var colNode = ds_excelcol.lookup("name", colSet.colName, "index");
  123. var colCount = ds_excelcol.getCaseCount("name=='"+colSet.colName+"'");
  124. if(utlf_isNull(colNode) || colCount != 1) {
  125. if(!skipNull) {
  126. alert("[" + colSet.colName + "]-[" + colSet.ref + "] 데이터를 찾을 수 없습니다.");
  127. return null;
  128. }
  129. } else {
  130. colSet.exRef = colNode;
  131. result.push(colSet);
  132. }
  133. }
  134. return result;
  135. }
  136. // 아이템 노드의 데이터와 그리드의 데이터 비교
  137. function misfExcelCompare(tar_Grd, rowIdx, matColObj, itemNode, nodIdx) {
  138. for(var k=0; k<matColObj.length; k++) {
  139. // trace("///" + itemNode.getColumn(nodIdx, parseInt(matColObj[k].exRef)));
  140. // trace("===" + tar_Grd.getCellText(rowIdx,tar_Grd.getBindCellIndex("body",matColObj[k].ref)));
  141. if(itemNode.getColumn(nodIdx, parseInt(matColObj[k].exRef)) != tar_Grd.getCellText(rowIdx,tar_Grd.getBindCellIndex("body",matColObj[k].ref)))
  142. return false;
  143. }
  144. return true;
  145. }
  146. // 엑셀데이터 적용 중 행 데이터가 변경되었을때 호출 되는 함수(오버라이딩 대상함수)
  147. function fReadExcelCall_RowChange(targetGrid, rowIndex) {
  148. // 오버라이딩
  149. }
  150. ]]></Script>