Экспорт таблицы HTML в Excel, включая выбранные значения текстовой области и раскрывающегося списка - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь сохранить в Excel таблицу HTML, которая содержит раскрывающиеся списки и поля комментариев.

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

<!doctype html>
<head>
<meta charset='utf-8'>

<script>

function fnExcelReport(){
    var tab_text="<table border='2px'><tr bgcolor='#87AFC6'>"; // bgcolor will give color to your first row
    var textRange; var j=0;
    tab = document.getElementById('tblData'); // id of table

    var table = document.getElementById("tblData");

    for(j = 0 ; j < tab.rows.length ; j++) 
    { 
        tab_text=tab_text+tab.rows[j].innerHTML+"</tr>";
    }

    tab_text=tab_text+"</table>";
    //alert(tab_text);
    tab_text= tab_text.replace(/<A[^>]*>|<\/A>/g, "");//remove if u want links in your table
    tab_text= tab_text.replace(/<img[^>]*>/gi,""); // remove if u want images in your table
    tab_text= tab_text.replace(/<input[^>]*>|<\/input>/gi, ""); // reomves input params

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE "); 

    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))      // If Internet Explorer
    {
        txtArea1.document.open("txt/html","replace");
        txtArea1.document.write(tab_text);
        txtArea1.document.close();
        txtArea1.focus(); 
        sa=txtArea1.document.execCommand("SaveAs",true,"Say Thanks to Submit.xlsx");
    }  
    else                 //other browser not tested on IE 11
        sa = window.open('data:application/vnd.ms-excel,' + encodeURIComponent(tab_text));  

    return (sa);
}

</script>

</head>

<body>

<table id="tblData">
    <tr>
        <th>Test</th>
        <th>Comments</th>
        <th>Pass or Fail</th>
    </tr>
    <tr>
        <td>Test 1</td>
        <td><textarea rows="2" cols="15" title="Enter comments if necessary" name="comment" placeholder="Comments" form="usrform"></textarea></td>
        <td>
        <select name="cars" autocomplete="off" class="passFail")">                  
                    <option name="default" value="default" selected="selected" disabled="disabled">Pass or Fail</option>
<option value="pass">Pass</option>
<option value="fail">Fail</option>
                    </select>
                    </td>
    </tr>
    <tr>
        <td>Test 2</td>
        <td><textarea rows="2" cols="15" title="Enter comments if necessary" name="comment" placeholder="Comments" form="usrform"></textarea></td>
        <td>
        <select name="cars" autocomplete="off" onchange="java_script_:show(this.options[this.selectedIndex].value)">                    
                    <option name="default" value="default" selected="selected" disabled="disabled">Pass or Fail</option>
<option value="pass">Pass</option>
<option value="fail">Fail</option>
                    </select>
                    </td>
    </tr>
    <tr>
        <td>Test 3</td>
        <td><textarea rows="2" cols="15" title="Enter comments if necessary" name="comment" placeholder="Comments" form="usrform"></textarea></td>
        <td>
            <select name="cars" autocomplete="off" onchange="java_script_:show(this.options[this.selectedIndex].value)">                    
                <option name="default" value="default" selected="selected" disabled="disabled">Pass or Fail</option>
                <option value="pass">Pass</option>
                <option value="fail">Fail</option>
            </select>
        </td>
    </tr>
</table>

<button id="btnExport" onclick="fnExcelReport('headerTable', 'test results');"> EXPORT </button>

</body>
</html>

Я получаю строки заголовков и Test 1, Test2 и Test3, но там, где есть комментарии и выпадающий список, я фактически получаю поле комментария и раскрывающийся список в Excel, а не значения, которые были введены в HTML.

Было бы лучше пройти через ячейку таблицы за ячейкой и записать это в Excel, или перейти столбец за столбцом и трактовать столбцы 2 и 3 по-разному, потому что я не буду использовать .innerHTML?

1 Ответ

0 голосов
/ 25 января 2019

Я просто проходил ячейку за ячейкой, и там, где у меня был выпадающий список, я просто попросил текст.

for (var r = 0, n = table.rows.length; r < n; r++) {
    for (var c = 0, m = table.rows[r].cells.length; c < m; c++) {
        if (c == 2 && r > 0) {
        passFail_row = ("passFail" + r);
        var sel = document.getElementById(passFail_row);
        var text= sel.options[sel.selectedIndex].text;
    }
    else 
        alert(table.rows[r].cells[c].innerText);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...