Как преобразовать файл Excel (XLS) в HTML и добавить сортировку и фильтрацию

0

Ниже код работает для преобразования excel в html и частичной сортировки.

Я хочу, чтобы при нажатии каких-либо ячеек в заголовке (или первой строке) вся таблица должна сортироваться на основе этого столбца (либо по возрастанию, либо по убыванию).

Примечание. Код ниже тестируется с любым файлом ввода excel и поддерживает настройки для activex в интернет-вариантах в IE9.

<HTML>
    <HEAD>
        <TITLE>Test</TITLE>    <script type="text/javascript" src="../jquery-latest.js"></script>
    <script type="text/javascript">

    </script>

    <STYLE TYPE="text/css">body div * { font-family: Verdana; font-weight: normal; font-size: 10px; } body { background-color: #FFEEFF; } .tableContainer table { border: 0px solid #000000; } .tblHeader { font-weight: bold; text-align: center; background-color: #FFAAEE; color: black; } .oddRow, .evenRow { vertical-align: top; } .tblHeader td, .oddRow td, .evenRow td { border-left: 2px solid #FFFFFF; border-bottom: 0px solid #000000; border-top: 0px solid #000000;} .lastCol { border-right: 0px solid #000000; } .oddRow { background-color: #abcdef; } .evenRow { background-color: #f0f0f0; }</STYLE>
    <script LANGUAGE="JavaScript">

        function _ge(id) {

                return document.getElementById(id);
        }

        function sortTable(){
            var tbl = document.getElementById("tblExcel2Html").tBodies[0];
            var store = [];
            //alert(tbl.rows.length);
            for(var i=0, len=tbl.rows.length; i<len; i++){
                var row = tbl.rows[i];
                //alert(row.cells[1].innerText);
                var sortnr = parseFloat(row.cells[1].textContent || row.cells[1].innerText);
                if(!isNaN(sortnr)){
                    alert(store.push([sortnr, row]));
                    //store.push([sortnr, row]);
                }
            }
            store.sort(function(x,y){
                //alert(x[0] - y[0]);
                return x[0] - y[0];
            });
            //alert(store.length);
            for(var i=0, len=store.length; i<len; i++){
                alert(tbl.appendChild(store[i][1]));
              //alert(tbl.appendChild(store[i][1]));
            }

            //alert(store);
            store = null;
        }

        function convert2HTML() {

            var ex;
            try {
                ex = new ActiveXObject("Excel.Application");
            }
            catch (e)
            {
                alert('Your browser does not support the Activex object.\nPlease switch to Internet Explorer.');
                return false;
            }

            //alert(arraytext);

            //var ef = ex.Workbooks.Open("D:\\JS_HTML5\\Vin\\Test.xlsx");

            var ef = ex.Workbooks.Open("D:\\JS_HTML5\\docs\\filter4\\tests\\Test.xlsx");

            var es = ef.Worksheets(1);

            var colsCount = ef.Worksheets(1).UsedRange.Columns.Count;
            //alert(colsCount);
            var rowsCount = ef.Worksheets(1).UsedRange.Rows.Count;
            //alert(rowsCount);

            var rStart = parseInt(1,10);
            var cStart = parseInt(1,10);

            var cEnd = parseInt(colsCount,10);
            var rEnd = parseInt(rowsCount,10);

              var oc = _ge('tableContainer');

            oc.innerHTML = '';
            var tbl = document.createElement('TABLE');
            tbl.id = 'tblExcel2Html';

            tbl.border = '10';
            tbl.cellPadding = '4';
            tbl.cellSpacing = '0';

            oc.appendChild(tbl);
            var i,j,row,col,r,c;

            for(i = rStart, r = 0; i <= rEnd; i++,r++) {

                row = tbl.insertRow(r);
                row.className = (i == rStart) ? 'tblHeader' : (i % 2 == 0) ? 'evenRow' : 'oddRow';

                for(j = cStart, c = 0; j <= cEnd; j++,c++) {

                    col = row.insertCell(c);
                    col.className = (j == cEnd) ? 'lastCol' : '';
                    col.innerHTML = es.Cells(i,j).value || ' ';

                }
            }
            ex.ActiveWorkbook.Close(true);
            ex.Application.Quit();
            ex = null;

            sortTable();
        }

    </script>
</HEAD>
<BODY onload = "convert2HTML()">
<h2>Test</h2>
<hr><br>

<!--     <td colspan="6" align="CENTER"><INPUT TYPE="button" VALUE="Convert to HTML" ONCLICK="convert2HTML()"></td> -->

<div id="tableContainer"></div>
<div id="tblExcel2Html"></div>
<footer>
    <br>
             <center>    &copy;Initial Draft V0.1     </center>
</footer>
<a href="Home.html" >Home</a>
</BODY>

В основном я хочу преобразовать excel в html с поддержкой сортировки и фильтрации.

Спасибо, в Advance Vinoth.S

  • 0
    Какой у Вас вопрос? что не работает? Что вы пробовали?
  • 0
    По сути, я хочу преобразовать Excel в HTML с поддержкой сортировки и фильтрации. С вышеизложенным я могу успешно конвертировать Excel в HTML, но я застрял в сортировке и фильтрации.
Показать ещё 1 комментарий
Теги:
sorting
filtering
xls

1 ответ

0

Создание объекта путем вызова

ex = new ActiveXObject("Excel.Application");

работает только в системах Windows с установленным Excel. Я предлагаю вам использовать jqgrid как javascript data-viewer и php-библиотеку, такую как phpexcel, которая анализирует excel и возвращает необработанные данные.

  • 0
    Любое решение / ответы?
  • 0
    вы пробовали с phpexcel + jqgrid?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню