<html>
    <head>
        <title>sorting a Table</title>
        
        <script type="text/javascript">
        var dataset = new Array();// 모든 data를 가지고 있고 정렬시 사용.
        
        /*
             작은것이 가장 위로 정렬
            colIndex : 원하는 columnIndex
        */
        function asc(colIndex){
            var sortArray = new Array();
            // 정렬을 수행 할 수 있는 행을 추출
            for(var i = 0; i < dataset.length; i++){
                sortArray[i] = dataset[i][colIndex];
            }

            // 해당 행으로 정렬을 수행
            var first, second, min;
            for(first = 0; first < sortArray.length-1; first++){
                //a[j]...a[a.length]사이에 가장작은 원소의 인덱스를 찾음
                for(second = first+1, min = first; second < sortArray.length; second++){
                    if(sortArray[second] < sortArray[min])
                        min = second;
                }
                swap(sortArray, min, first, min, first);
            }
        }
        // 정렬 중 필요한 인자들의 위치를 바꿔줌
        function swap(array, first, second, arrayIndexA, arrayIndexB){
            var temp = array[first];
                array[first] = array[second];
                array[second] = temp;

            var tempDataSet = dataset[arrayIndexA];
            dataset[arrayIndexA] = dataset[arrayIndexB];
            dataset[arrayIndexB] = tempDataSet;
        }
        /*
             큰것이 가장 위로 정렬
             colIndex : 원하는 columnIndex
        */
        function desc(colIndex){
            var sortArray = new Array();
            // 정렬을 수행 할 수 있는 행을 추출
            for(var i = 0; i < dataset.length; i++){
                sortArray[i] = dataset[i][colIndex];
            }
            // 해당 행으로 정렬을 수행
            var first, second, max;
            for(first = 0; first < sortArray.length-1; first++){
                //a[j]...a[a.length]사이에 가장큰  원소의 인덱스를 찾음
                for(second = first+1, max = first; second < sortArray.length; second++){
                    if(sortArray[second] > sortArray[max])
                        max = second;
                }
                swap(sortArray, first, max, first, max);
            }
        }

        /*
            List 생성 : 실제로는 가져온 Data를 뿌려 줄 때 JSP등에서 직접 생성하므로 필요 없을 듯 함.
        */
        function create(tName, tBodyId){
            //var tbody = document.getElementById(id).getElementsByTagName("TBODY")[1];
            var tbody = document.getElementById(tBodyId);
                          
                  for(var i = 1; i < 14; i++){
                      var row = document.createElement("TR");
                      var td1 = document.createElement("TD");
                      var td2 = document.createElement("TD");
                      var td3 = document.createElement("TD");
                      var td4 = document.createElement("TD");
                      var td5 = document.createElement("TD");
                      
                      td1.appendChild(document.createTextNode(i));
                    td2.appendChild(document.createTextNode("id " + i));
                    td3.appendChild(document.createTextNode("title "+ i));
                    td4.appendChild(document.createTextNode("name " + i));
                    td5.appendChild(document.createTextNode("date " + i));
                    
                    row.appendChild(td1);
                    row.appendChild(td2);
                    row.appendChild(td3);
                    row.appendChild(td4);
                    row.appendChild(td5);
                              
                    tbody.appendChild(row);

                    // rowData create
                    var rowDatas = new Array();
                    rowDatas[0] = i;
                    rowDatas[1] = "id" + i;
                    rowDatas[2] = "title" + i;
                    rowDatas[3] = "name" + i;
                    rowDatas[4] = "date" + i;

                    dataset.push(rowDatas);
                  }
        }
        /*
        List 생성
        필요인자 :
            tBodyId : List할 table 아래에 <TBODY>로 이름지은 elementID
            colNum  : number of columns
        */
        function update(tName, tBodyId, colNum){
            clearTable(tName);
                
            for(var i = 0; i < dataset.length; i ++){
                var row = document.createElement("tr");
                var rowArray = dataset[i];

                for(var j = 0; j < colNum; j++){
                    row.appendChild(createCellWithText(rowArray[j]));                    
                }

                document.getElementById(tBodyId).appendChild(row);
            }
        }

        function createCellWithText(text){
            var cell = document.createElement("td");
            cell.appendChild(document.createTextNode(text));
            return cell;
        }
        /*
            해당 Table의 주어진 index의 Row를 삭제
        */
        function deleteRow(tName, rowIndex){
            var tbody = document.getElementById(tName).getElementsByTagName("TBODY")[1];
            tbody.removeChild(rowIndex);
        }
        /*
            해당Table 의 첫번째 Row를 제외한 나머지 Row 모두 제거
        */
        function clearTable(tName){            
              var tbody = document.getElementById(tName).getElementsByTagName("TBODY")[1];
            var trows = tbody.rows.length;
            //for(var i = trows ; i > 1; i--){
            while(tbody.rows.length > 0){
                tbody.removeChild(tbody.lastChild);
            }            
        }

        /*
            엑셀출력.
            1. Title
            2. Body
             - 실제 Data는 표에 있는 내용이 아니라 이미 저장해 놓은 dataset으로 뿌려줌.
        */
        function AutomateExcel(xTitle, xColumns){
            if(xTitle == null){
                xTitle = "Excel download";
            }
            if(xColumns == null){
                xColumns = "Num,ID,Title,Writer,Date";
            }
            var cols = xColumns.split(",");

            var left = "A";
            var top = 3;
            var right = indexToAlphabet(cols.length);
            var bottom = dataset.length + top;
            
            

            
            // Start Excel and get Application object.//
            try{
                var oXL = new ActiveXObject("Excel.Application");

                oXL.Visible = true;

                // Get a new workbook.
                var oWB = oXL.Workbooks.Add();
                var oSheet = oWB.ActiveSheet;

                //Format Title as bold, vertical alignment = center.
                //Title --------------------------------------------------------
                oSheet.Range("A1", "E1").Font.Bold = true;
                oSheet.Range("A1", "E1").VerticalAlignment =  -4108; //xlVAlignCenter
                oSheet.Cells(1, 1).Value = xTitle;
 
                //BODY  --------------------------------------------------------
                //Format Table header
                oSheet.Range("A2", "E2").Font.Bold = true;
                oSheet.Range("A2", "E2").VerticalAlignment =  -4108; //xlVAlignCenter
 
                // Add table headers going cell by cell.
                for(var i = 0; i < cols.length; i++){
                    var j = i+1;
                    oSheet.Cells(2, j).Value = cols[i];
                }
 
                // Create an array to set multiple values at once.
                // Range
                
                //oSheet.Range(left + top + "," + right + bottom).Font.Bold = true;
                //oSheet.Range(left + top + "," + right + bottom).VerticalAlignment = -4108;
 
                for(var m = 0; m < (bottom-top); m++){
                    var nowCol = indexToAlphabet(m);
                    var c = m + 3;

                    for(var l = 0; l < cols.length; l++){
                        var r = l + 1;
                        //oSheet.Cells(c, r).Value = m + " : " + r;
                        oSheet.Cells(c, r).Value = dataset[m][l];
                    }
                }

                ///////////////// options of saving //////////////////////////
                // Make sure Excel is visible and give the user control
                // of Excel's lifetime.
                //oXL.Visible = true;
                //oXL.UserControl = true;

                // save as a file directly
                oWB.SaveAs("c:\\test.xls");
                oXL.Quit();
            }catch(e){
                alert("브라우저 옵션 > 도구 > 인터넷옵션 > 보안 > 안전하지 않는 것으로 표시된 ActivX 컨트롤 초기화 및 스크립트 > 확인 ");
            }
        }
        /*
            원하는 칼럼의 알파벳을 찾기위한 function
        */
        function indexToAlphabet(idx){
            var alphabet = new Array("A","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");
            return alphabet[idx];
        }
        </script>
        
        
    </head>
    
    <body>
        <input type="button" value="asc" onClick="asc(0);"/>
        <input type="button" value="desc" onClick="desc(0);"/>
        <input type="button" value="create" onClick="create('tblMain', 'employeeList');"/>
        <input type="button" value="update" onClick="update('tblMain', 'employeeList', 5);"/>
        <input type="button" value="clear" onClick="clearTable('tblMain');"/>
        <input type=button value="Download Excel" onclick="AutomateExcel();">
        
        <p>
        <span id="employeeListSpan">
    
        <h2>게시판Test : </h2>
        
        <table id="tblMain" border="1" width="80%">
        
            <tr>
                <td>Num</td>
                <td>ID</td>
                <td>Title</td>
                <td>Writer</td>
                <td>Date</td>
            </tr>
            <tbody id="employeeList"></tbody>
        </table>
        </span>
        
        
        
    </body>

</html>
728x90
BLOG main image
"그게 뭐 어쨌다는 거냐?" 늘 누가 나에게 나에대한 말을할 때면 이말을 기억해라. by nobang

카테고리

nobang이야기 (1933)
Life With Gopro (7)
Life With Mini (79)
Diary (971)
너 그거 아니(do you know) (162)
난 그래 (159)
Study (290)
속지말자 (10)
Project (34)
Poem (15)
Song (0)
Photo (113)
낙서장 (45)
일정 (0)
C.A.P.i (2)
PodCast (0)
nobang (27)
고한친구들 (4)
recieve (0)
History (0)
android_app (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :