misExcel.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. // 엑셀파일 업로드
  2. function misfUploadExcel() {
  3. model.removeNodeset(grd_uploadexcel.nodeset);
  4. model.makeNode(grd_uploadexcel.nodeset);
  5. model.removeNodeset(grd_excelcol.nodeset);
  6. model.makeNode(grd_excelcol.nodeset);
  7. var fileName = window.fileDialog("open", "", false);
  8. if(fileName == null || fileName == "") return false;
  9. grd_uploadexcel.loadExcel(fileName);
  10. var uploadNode = instance1.selectNodes(grd_uploadexcel.nodeset);
  11. if(uploadNode == null || uploadNode.length < 1) return false;
  12. var headNode = uploadNode.item(0);
  13. var caption = "";
  14. var selNode = headNode.firstChild;
  15. for(var i=0; i<99; i++){
  16. if(i != 0)caption += "^";
  17. var index = "idx" + (i<9?"0":"") + (i+1);
  18. var colName = selNode==null?index:selNode.value;
  19. caption += colName;
  20. model.makeValue("/root/temp/uploadexcel/colnamelist[" + (i+1) + "]/index", index);
  21. model.makeValue("/root/temp/uploadexcel/colnamelist[" + (i+1) + "]/name", colName);
  22. if(selNode != null) selNode = selNode.nextSibling;
  23. }
  24. grd_uploadexcel.caption = caption;
  25. grd_uploadexcel.deleteRow(1);
  26. grd_uploadexcel.refresh();
  27. return true;
  28. }
  29. // 업로드 된 엑셀 내용을 그리드에 셋팅한다.
  30. function misfReadExcel(tar_Grd, matCols, setCols) {
  31. var matColObj = misfSplitColSetting(matCols, false);
  32. var setColObj = misfSplitColSetting(setCols, true);
  33. if(matColObj == null) {
  34. alert("비교컬럼 설정에 오류가 있습니다.");
  35. return;
  36. }
  37. if(setColObj == null) {
  38. alert("셋팅컬럼 설정에 오류가 있습니다.");
  39. return;
  40. }
  41. var uploadNode = instance1.selectNodes(grd_uploadexcel.nodeset);
  42. for (var rowIdx=tar_Grd.fixedRows; rowIdx < tar_Grd.rows; rowIdx++) {
  43. for(var nodIdx=0; nodIdx < uploadNode.length; nodIdx++){
  44. if(misfExcelCompare(tar_Grd, rowIdx, matColObj, uploadNode.item(nodIdx))) {
  45. var changeFlag = false;
  46. for(var k=0; k<setColObj.length; k++) {
  47. if(tar_Grd.isReadOnly(rowIdx,tar_Grd.colRef(setColObj[k].ref))) continue;
  48. var beforValue = tar_Grd.valueMatrix(rowIdx,tar_Grd.colRef(setColObj[k].ref));
  49. var afterValue = uploadNode.item(nodIdx).selectSingleNode(setColObj[k].exRef).text.split(',').join("");
  50. tar_Grd.valueMatrix(rowIdx,tar_Grd.colRef(setColObj[k].ref)) = afterValue;
  51. if(beforValue != afterValue) {
  52. tar_Grd.cellStyle("color",rowIdx,tar_Grd.colRef(setColObj[k].ref)) = "#FF0000";
  53. changeFlag = true;
  54. }
  55. }
  56. if(changeFlag) {
  57. fReadExcelCall_RowChange(tar_Grd, rowIdx);
  58. tar_Grd.addStatus(rowIdx,"update");
  59. }
  60. }
  61. }
  62. }
  63. tar_Grd.refresh();
  64. }
  65. // 입력 된 컬럼 설정 파라메터를 객체로 변경
  66. function misfSplitColSetting(colString, skipNull) {
  67. var result = new Array();
  68. if(skipNull == null || skipNull == "") skipNull = false;
  69. var cols = colString.split("^");
  70. for(var i=0; i<cols.length; i++) {
  71. var splt = cols[i].split("=");
  72. if(splt == null || splt.length != 2) return null;
  73. var colSet = new Object();
  74. colSet.ref = splt[0];
  75. colSet.colName = splt[1];
  76. var colNode = instance1.selectNodes(grd_excelcol.nodeset + "[name='" + colSet.colName + "']");
  77. if(colNode == null || colNode.length != 1) {
  78. if(!skipNull) {
  79. alert("[" + colSet.colName + "]-[" + colSet.ref + "] 데이터를 찾을 수 없습니다.");
  80. return null;
  81. }
  82. } else {
  83. colSet.exRef = colNode.item(0).selectSingleNode("index").text;
  84. result.push(colSet);
  85. }
  86. }
  87. return result;
  88. }
  89. // 아이템 노드의 데이터와 그리드의 데이터 비교
  90. function misfExcelCompare(tar_Grd, rowIdx, matColObj, itemNode) {
  91. for(var k=0; k<matColObj.length; k++) {
  92. if(itemNode.selectSingleNode(matColObj[k].exRef).text
  93. != tar_Grd.valueMatrix(rowIdx,tar_Grd.colRef(matColObj[k].ref)))
  94. return false;
  95. }
  96. return true;
  97. }
  98. // 엑셀데이터 적용 중 행 데이터가 변경되었을때 호출 되는 함수(오버라이딩 대상함수)
  99. function fReadExcelCall_RowChange(targetGrid, rowIndex) {
  100. // 오버라이딩
  101. }