2016-02-25 3 views
1

Недавно я создал сайт, который имеет возможность экспортировать данные таблицы в файл excel. Я использую плагин table2excel для этого, который отлично работает на Chrome, но не работает на IE, сафари, firefox или любой другой браузер, если на то пошло. было интересно, если я делаю что-то здесь не так, и если есть какие-либо другой плагин или способ сделать это:экспорт таблицы Html в excel с использованием javascript/jquery

(примечание: я использую laravels шаблонизатор под названием лезвие, чтобы включить table2excel плагин) HTML:

<head> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <meta charset="UTF-8"> 
    <title></title> 

    <!-- CSS --> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous"> 
    <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,400italic,700,700italic' rel='stylesheet' type='text/css'> 
    {{ HTML::style('css/style.css') }} 
    <!-- Javascript --> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
    {{ HTML::script('js/jquery.table2excel.js') }} 
    {{ HTML::script('js/script.js') }} 

</head> 

      <table id="signedinTable" class="peopleTable table table-hover"> 
       <thead> 
        <tr> 
         <th>Voornaam</th> 
         <th>Achternaam</th> 
         <th>Telefoon nr.</th> 
         <th>E-mail</th> 
         <th>Bedrijf</th> 
         <th>Partner?</th> 
        </tr> 
       </thead> 

       <tbody> 
        @foreach($results as $result) 

        @if($result->isGoing == 1) 

         <tr class="signedinRow"> 
          <td>{{ $result->firstname }}</td> 
          <td>{{ $result->lastname }}</td> 
          <td>{{ $result->phone }}</td> 
          <td>{{ $result->email }}</td> 
          <td>{{ $result->company }}</td> 
          <td class="signedinPartner">{{ $result->partner }}</td> 
         </tr> 

        @endif 

        @endforeach 
       </tbody> 
      </table> 

     </div> 
     <button id="signedinExport" class="excl btn btn-primary">Download als excel bestand</button> 

JQuery:

$("#signedinExport").click(function(){ 
    $("#signedinTable").table2excel({ 
     exclude:".noExl", 
     name:"Aangemelde mensen", 
     filename:"Aangemelde mensen" 
    }); 
}); 

я не получаю ошибки от IE, Firefox или Safari, а также отметить, что я не прошу людей писать код для меня вообще, только толчок в правильном направлении было бы потрясающе!

пожалуйста! всякая помощь очень ОЧЕНЬ высоко ценится!

+0

«Мне действительно нужно сделать это как можно скорее», ну, похоже, вам нужно написать код. Публикация вопроса «дайте мне код» не является правильным способом решения этой проблемы. Кроме того, он слишком широк и должен быть закрыт как таковой. – zzzzBov

+0

С вашего вопроса, похоже, вам нужно провести какое-то исследование. –

+0

@zzzzBov никогда не предназначался для людей, чтобы писать код для меня жестким .. просто спросил, есть ли что-то не так с моим кодом или если есть другой способ сделать это, и, как вы можете видеть, я опубликовал код, который я написал, чтобы люди может увидеть что-то не так с этим, для чего именно этот сайт? перестать ломать свои яйца m8 –

ответ

0

Не с помощью функции JQuery, и немного больше кода, но вы могли бы дать этому выстрел:

function fnExcelReport() 
{ 
    var tab_text="<table border='2px'><tr bgcolor='#87AFC6'>"; 
    var textRange; var j=0; 
    tab = document.getElementById('headerTable'); // id of table 

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

    tab_text=tab_text+"</table>"; 
    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 Sumit.xls"); 
    } 
    else     //other browser not tested on IE 11 
     sa = window.open('data:application/vnd.ms-excel,' + encodeURIComponent(tab_text)); 

    return (sa); 
} 

Просто создать пустой IFRAME:

<iframe id="txtArea1" style="display:none"></iframe> 

Вызов этой функции на:

<button id="btnExport" onclick="fnExcelReport();"> EXPORT </button> 

link to original post

+0

Пробовал что-то подобное уже, но я дам ему шанс, спасибо ALOT за ответ! –

+0

экспортирует таблицу с расширением «файл», но это не имеет никакого отношения к тому, что iframe не помещается правильно внутри html? где я должен разместить iframe? –

+0

Просто предположите, возможно, измените заявление sa на: sa = window.open ('data: application/vnd.ms-excel,' + encodeURIComponent (tab_text) + '.xls'); – Wijnand

0

я недавно был подобный вопрос и нашел (большинство) следующий фрагмент кода:

function exportTableToCSV($table, filename, answer) { 
    var $rows = $table.find('tr'), 
    //Temporary delimiter characters unlikely to be typed by keyboard 
    //This is to avoid accidentally splitting the actual contents 
    tmpColDelim = String.fromCharCode(11), //vertical tab character 
    tmpRowDelim = String.fromCharCode(0), //null character 
    //actual delimiter characters for CSV format 
    colDelim = '","', 
    rowDelim = '"\r\n"', 
    //Grab text from table into CSV formatted string 
    csv = '"' + $rows.map(function(i, row) { 
     var $row = $(row), 
     $cols = $row.find('th,td'); 
     return $cols.map(function(j, col) { 
     var $col = $(col), 
      text = $col.text(); 
     return text.replace(/"/g, '""'); //escape double quotes 
     }).get().join(tmpColDelim); 
    }).get().join(tmpRowDelim) 
    .split(tmpRowDelim).join(rowDelim) 
    .split(tmpColDelim).join(colDelim) + '"'; 
    //Data URI 
    var IEwindow = window.open(); 
    IEwindow.document.write(csv); 
    IEwindow.document.close(); 
    if (IEwindow.document.execCommand('SaveAs', false, filename + ".csv")) { 
    saveAsAnswer = 'saved'; 
    } else { 
    saveAsAnswer = 'not saved'; 
    } 
    IEwindow.close(); 
} 

Позор на меня не вспомнить, где я нашел это и не давая кредит, где кредит должен ...

Я не использую много плагинов и поэтому люблю, что в приведенном выше коде используется только jQuery. Я использую приведенный выше код для Internet Explorer 11. Для поддержки кросс-браузера вы хотите отредактировать раздел URI данных (выполните быстрый поиск SO или Google для URI данных).

Я создал jsfiddle, чтобы показать вам, как это работает.

+0

спасибо, что нашли время! решите это! –

+0

не работает в jsfiddle –

+0

@YounasBangash У вас есть всплывающие окна, заблокированные вашим браузером? Для этого кода необходимо открыть новое окно. Я только что протестировал его, и он работает для меня. – jritchey

Смежные вопросы