HTML tablo verilerini JavaScript kullanarak Excel'e aktarın / JQuery, Chrome tarayıcısında düzgün çalışmıyor


91

Hız şablonunda bir HTML tablom var. Html tablo verilerini, java betiği veya jquery kullanarak, tüm tarayıcı ile birlikte excel'e aktarmak istiyorum. Aşağıdaki komut dosyasını kullanıyorum

<script type="text/javascript">
function ExportToExcel(mytblId){
       var htmltable= document.getElementById('my-table-id');
       var html = htmltable.outerHTML;
       window.open('data:application/vnd.ms-excel,' + encodeURIComponent(html));
    }
</script>

Bu komut dosyası Mozilla Firefox'ta iyi çalışıyor , bir excel iletişim kutusuyla açılır ve açma veya kaydetme seçeneklerini ister. Ancak aynı komut dosyasını Chrome tarayıcısında test ettiğimde beklendiği gibi çalışmıyor , düğmeye tıklandığında excel için bir açılır pencere görünmüyor . Veriler "dosya türü: dosya" ile bir dosyaya indiriliyor, .xls gibi uzantı yok. Chrome konsolunda hata yok.

Jsfiddle örneği:

http://jsfiddle.net/insin/cmewv/

Bu mozilla'da iyi çalışıyor ancak chrome'da çalışmıyor.

Chrome tarayıcı Test Durumu:

İlk Resim: Excel'e aktar butonuna tıklıyorum

İlk Resim: Excel'e aktar butonuna tıklıyorum

ve sonuç:

Sonuç


Test durumu krom içindir
Sukane

1
Açık kaynak ürünü LibreOffice ve Chrome tarayıcı kullanıyorsanız yukarıdaki test durumu başarısız olur. Ancak MS Office yüklediyseniz, kod düzgün çalışacaktır.
Sukane

Yanıtlar:


169

Excel dışa aktarma komut dosyası IE7 +, Firefox ve Chrome'da çalışır.

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);
}

Boş bir iframe oluşturmanız yeterlidir:

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

Bu işlevi şu şekilde çağırın:

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

1
değilse o zaman bu satır ne için? var txt = document.getElementById ('txtArea1'). contentWindow;
2014

3
Chrome'da, indirme düğmesini tıkladığınızda, bu yöntemi kullanırken hiçbir şey olmuyor. Konsol hatası falan yok.
Kyle Bachan

1
Mükemmel +1 !!! IE 11, Chrome 35, Firefox 29, Opera 17'de çalışıyor Ama safari 5.1.7'de çalışmıyor !!! :(
Suganth G

9
Randome adını nasıl değiştirebilirim. Özel bir isim ayarlamak istiyorum.
osman Rahimi

21
"Download.xls dosya biçimi ve uzantısı uyuşmuyor" Bu yöneticiyi mutlu etmiyor: / Herhangi bir fikir?
Tom Stickel

36

Datatable eklenti amacı en iyi şekilde çözer ve HTML tablo verilerini Excel, PDF, TEXT'e aktarmamızı sağlar. kolayca yapılandırılabilir.

Lütfen aşağıdaki verilebilir referans bağlantısında tam örneği bulun:

https://datatables.net/extensions/buttons/examples/html5/simple.html

(datatable referans sitesinden ekran görüntüsü) görüntü açıklamasını buraya girin


4
AMAN TANRIM! Bu harika bir eklenti! ... ve gömülü birkaç eklenti var !! Dışa Aktar, Sırala, Yeniden Sırala, Baskı Önizleme vb. İhtiyaçları gösteren tüm verilerimi sadece 1 çekimde çözdüm!
Gusstavv Gil

Bu eklentiyi kullanarak excel'ime stil uygulayabilir miyim?
Shruthi Sathyanarayana

@Addy bu bir DataTables tek çözüm olsa da, değil mi?
Karl

1
Her ikisini de korumak istiyorsanız, dışa aktarma düğmesi her bir sayfa satırı sayımını kaldırır. sorunu çözmek için lütfen datatables.net/extensions/buttons/examples/initialisation/… adresini kontrol edin .
Kaushik Das

Eklenti harika. Verileri dışa aktarmak ve burada vurgulamak için ilgili kodu çıkarmanın bir yolu var mı? Bu çok yardımcı olur. Şimdiden teşekkürler
Murtuza Husain

31

Bu yardımcı olabilir

function exportToExcel(){
var htmls = "";
            var uri = 'data:application/vnd.ms-excel;base64,';
            var template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>'; 
            var base64 = function(s) {
                return window.btoa(unescape(encodeURIComponent(s)))
            };

            var format = function(s, c) {
                return s.replace(/{(\w+)}/g, function(m, p) {
                    return c[p];
                })
            };

            htmls = "YOUR HTML AS TABLE"

            var ctx = {
                worksheet : 'Worksheet',
                table : htmls
            }


            var link = document.createElement("a");
            link.download = "export.xls";
            link.href = uri + base64(format(template, ctx));
            link.click();
}

1
Ya sadece html tablosunda görünen sütunları dışa aktarmak istersem?
Nouman Bhatti

Merhabalar, sayfayla herhangi bir EXCEL işlemi yapamıyorum, örneğin: Autosum. Bu EXCEL sayfasının veri formatı veya başka herhangi bir sorun yüzünden mi .. Bazı işlemleri yapmak için yardıma ihtiyacım var.
Nanda Kishore Allu

9

http://wsnippets.com/export-html-table-data-excel-sheet-using-jquery/ bu bağlantıyı deneyin, sorununuzu çözebilir

görüntü açıklamasını buraya girin


Uchit, cevabın için teşekkür ederim ama bu örneği daha önce denedim, bahsettiğim gibi Mozilla'da sorunsuz çalışıyor ama Chorme'da çalışmıyor.Lütfen bu örneği Chrome tarayıcısında deneyebilir misin?
Sukane

5
Kodunuzu jsfiddle üzerinde denedim ve olumlu sonuç alıyorum. Chorme'da bile iyi çalışıyor. Yukarıdaki
görselde

1
Uchit, teşekkürler, evet kod çalışıyor. Sorun şu ki, Libre Office kullanıyordum, bu yüzden Chrome'da excel'e dışa aktarma iyi çalışmıyordu (m söz konusu olduğunda ref ekran görüntüsü). Ama MS ofisinde, bahsettiğiniz gibi çalışıyor. Bunun için bir jQuery kodu sağladığınız için teşekkür ederiz.
Sukane

Bu işlev, açılan alanların ve zaman damgalarının bulunduğu alanların değerlerini dışa aktarmıyor
SNT93

çoklu tablo html ile çalışmaz, sadece bir tablo ile çalışır. Bunu çoklu tablolarla nasıl yapabilirim ??????
ignacio chiazzo

9

Kullanmak yerine etkinlikle window.openbir bağlantı kullanabilirsiniz onclick.
Ve html tablosunu uri'ye koyabilir ve indirilecek dosya adını ayarlayabilirsiniz.

Canlı demo:

function exportF(elem) {
  var table = document.getElementById("table");
  var html = table.outerHTML;
  var url = 'data:application/vnd.ms-excel,' + escape(html); // Set your html table into url 
  elem.setAttribute("href", url);
  elem.setAttribute("download", "export.xls"); // Choose the file name
  return false;
}
<table id="table" border="1">
  <tr>
    <td>
      Foo
    </td>
    <td>
      Bar
    </td>
  </tr>
</table>

<a id="downloadLink" onclick="exportF(this)">Export to excel</a>


fonksiyonda masa kenarını, td genişliğini vb. nasıl ayarlayabilirim?
Zeffry Reynando

9

TableExport

TableExport - HTML tablolarını xlsx, xls, csv ve txt dosyalarına dışa aktarmak için basit, uygulaması kolay kitaplık.

Bu kitaplığı kullanmak için yapıcıyı basitçe çağırın TableExport:

new TableExport(document.getElementsByTagName("table"));

// OR simply

TableExport(document.getElementsByTagName("table"));

// OR using jQuery

$("table").tableExport(); 

Tablolarınızın, düğmelerinizin ve dışa aktarılan verilerinizin görünümünü özelleştirmek için ek özellikler aktarılabilir. Daha fazla bilgi için buraya bakın


PhantomJ'leri destekliyor mu? Hatalar nasıl bildirilir?
golimar

6

Bu örnekleri birleştirmem:

https://www.codexworld.com/export-html-table-data-to-excel-using-javascript https://bl.ocks.org/Flyer53/1de5a78de9c89850999c

function exportTableToExcel(tableId, filename) {
    let dataType = 'application/vnd.ms-excel';
    let extension = '.xls';

    let base64 = function(s) {
        return window.btoa(unescape(encodeURIComponent(s)))
    };

    let template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>';
    let render = function(template, content) {
        return template.replace(/{(\w+)}/g, function(m, p) { return content[p]; });
    };

    let tableElement = document.getElementById(tableId);

    let tableExcel = render(template, {
        worksheet: filename,
        table: tableElement.innerHTML
    });

    filename = filename + extension;

    if (navigator.msSaveOrOpenBlob)
    {
        let blob = new Blob(
            [ '\ufeff', tableExcel ],
            { type: dataType }
        );

        navigator.msSaveOrOpenBlob(blob, filename);
    } else {
        let downloadLink = document.createElement("a");

        document.body.appendChild(downloadLink);

        downloadLink.href = 'data:' + dataType + ';base64,' + base64(tableExcel);

        downloadLink.download = filename;

        downloadLink.click();
    }
}

1
Yakalanmamış Referans Hatası: base64 tanımlı değil
Pedro Joaquín


4

6 Haziran 2014 saat 11: 59'dan itibaren örneklerin yanıtıyla ilgili olarak:

Excel verilerini daha büyük görüntülemek için yazı tipi boyutu 20px olan bir css stili ekledim. Örneklem kodlarında baştaki <tr>etiketler eksiktir, bu yüzden önce başlığı ve daha sonra bir döngü içindeki diğer tablo satırlarını çıkardım .

function fnExcelReport()
{
    var tab_text = '<table border="1px" style="font-size:20px" ">';
    var textRange; 
    var j = 0;
    var tab = document.getElementById('DataTableId'); // id of table
    var lines = tab.rows.length;

    // the first headline of the table
    if (lines > 0) {
        tab_text = tab_text + '<tr bgcolor="#DFDFDF">' + tab.rows[0].innerHTML + '</tr>';
    }

    // table data lines, loop starting from 1
    for (j = 1 ; j < lines; j++) {     
        tab_text = tab_text + "<tr>" + tab.rows[j].innerHTML + "</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
    // console.log(tab_text); // aktivate so see the result (press F12 in browser)

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

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

    return (sa);
}   

Belirli bir sütunun excel'e aktarılmasının nasıl kaldırılacağını söyler misiniz? Örneğin, kaçınmak istiyorum tab.rows[j].cells[13] , yardımınız gerçekten takdir
ediliyor

Çok güzel cevap, çok basit bir tablo için sadece son satırı window.open('data:application/vnd.ms-excel,' + encodeURIComponent(tab_text));tutardım : kodlama çok önemlidir.
Pere Sayfaları

4

 function exportToExcel() {
        var tab_text = "<tr bgcolor='#87AFC6'>";
        var textRange; var j = 0, rows = '';
        tab = document.getElementById('student-detail');
        tab_text = tab_text + tab.rows[0].innerHTML + "</tr>";
        var tableData = $('#student-detail').DataTable().rows().data();
        for (var i = 0; i < tableData.length; i++) {
            rows += '<tr>'
                + '<td>' + tableData[i].value1 + '</td>'
                + '<td>' + tableData[i].value2 + '</td>'
                + '<td>' + tableData[i].value3 + '</td>'
                + '<td>' + tableData[i].value4 + '</td>'
                + '<td>' + tableData[i].value5 + '</td>'
                + '<td>' + tableData[i].value6 + '</td>'
                + '<td>' + tableData[i].value7 + '</td>'
                + '<td>' +  tableData[i].value8 + '</td>'
                + '<td>' + tableData[i].value9 + '</td>'
                + '<td>' + tableData[i].value10 + '</td>'
                + '</tr>';
        }
        tab_text += rows;
        var data_type = 'data:application/vnd.ms-excel;base64,',
            template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table border="2px">{table}</table></body></html>',
            base64 = function (s) {
                return window.btoa(unescape(encodeURIComponent(s)))
            },
            format = function (s, c) {
                return s.replace(/{(\w+)}/g, function (m, p) {
                    return c[p];
                })
            }

        var ctx = {
            worksheet: "Sheet 1" || 'Worksheet',
            table: tab_text
        }
        document.getElementById("dlink").href = data_type + base64(format(template, ctx));
        document.getElementById("dlink").download = "StudentDetails.xls";
        document.getElementById("dlink").traget = "_blank";
        document.getElementById("dlink").click();
    }

Burada Değer 1 ila 10, aldığınız sütun adlarıdır


4

Tabloyu excel dosyasında dışa aktarmak için tableToExcel.js'yi kullanabilirsiniz .

Bu şu şekilde çalışır:

1). Bu CDN'yi projenize / dosyanıza ekleyin

<script src="https://cdn.jsdelivr.net/gh/linways/table-to-excel@v1.0.4/dist/tableToExcel.js"></script>

2). Ya JavaScript Kullanarak:

<button id="btnExport" onclick="exportReportToExcel(this)">EXPORT REPORT</button>

function exportReportToExcel() {
  let table = document.getElementsByTagName("table"); // you can use document.getElementById('tableId') as well by providing id to the table tag
  TableToExcel.convert(table[0], { // html code may contain multiple tables so here we are refering to 1st table tag
    name: `export.xlsx`, // fileName you could use any name
    sheet: {
      name: 'Sheet 1' // sheetName
    }
  });
}

3). Veya Jquery kullanarak

<button id="btnExport">EXPORT REPORT</button>

$(document).ready(function(){
    $("#btnExport").click(function() {
        let table = document.getElementsByTagName("table");
        TableToExcel.convert(table[0], { // html code may contain multiple tables so here we are refering to 1st table tag
           name: `export.xlsx`, // fileName you could use any name
           sheet: {
              name: 'Sheet 1' // sheetName
           }
        });
    });
});

Diğer bilgiler için bu github bağlantısına başvurabilirsiniz.

https://github.com/linways/table-to-excel/tree/master

veya canlı örneğe başvurmak için aşağıdaki bağlantıyı ziyaret edin

https://codepen.io/rohithb/pen/YdjVbb

Umarım bu birine yardımcı olur :-)


1

@Sampopes cevabımın versiyonu

function exportToExcel(that, id, hasHeader, removeLinks, removeImages, removeInputParams) {
if (that == null || typeof that === 'undefined') {
    console.log('Sender is required');
    return false;
}

if (!(that instanceof HTMLAnchorElement)) {
    console.log('Sender must be an anchor element');
    return false;
}

if (id == null || typeof id === 'undefined') {
    console.log('Table id is required');
    return false;
}
if (hasHeader == null || typeof hasHeader === 'undefined') {
    hasHeader = true;
}
if (removeLinks == null || typeof removeLinks === 'undefined') {
    removeLinks = true;
}
if (removeImages == null || typeof removeImages === 'undefined') {
    removeImages = false;
}
if (removeInputParams == null || typeof removeInputParams === 'undefined') {
    removeInputParams = true;
}

var tab_text = "<table border='2px'>";
var textRange;

tab = $(id).get(0);

if (tab == null || typeof tab === 'undefined') {
    console.log('Table not found');
    return;
}

var j = 0;

if (hasHeader && tab.rows.length > 0) {
    var row = tab.rows[0];
    tab_text += "<tr bgcolor='#87AFC6'>";
    for (var l = 0; l < row.cells.length; l++) {
        if ($(tab.rows[0].cells[l]).is(':visible')) {//export visible cols only
            tab_text += "<td>" + row.cells[l].innerHTML + "</td>";
        }
    }
    tab_text += "</tr>";
    j++;
}

for (; j < tab.rows.length; j++) {
    var row = tab.rows[j];
    tab_text += "<tr>";
    for (var l = 0; l < row.cells.length; l++) {
        if ($(tab.rows[j].cells[l]).is(':visible')) {//export visible cols only
            tab_text += "<td>" + row.cells[l].innerHTML + "</td>";
        }
    }
    tab_text += "</tr>";
}

tab_text = tab_text + "</table>";
if (removeLinks)
    tab_text = tab_text.replace(/<A[^>]*>|<\/A>/g, "");
if (removeImages)
    tab_text = tab_text.replace(/<img[^>]*>/gi, ""); 
if (removeInputParams)
    tab_text = tab_text.replace(/<input[^>]*>|<\/input>/gi, "");

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

if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))      // If Internet Explorer
{
    myIframe.document.open("txt/html", "replace");
    myIframe.document.write(tab_text);
    myIframe.document.close();
    myIframe.focus();
    sa = myIframe.document.execCommand("SaveAs", true, document.title + ".xls");
    return true;
}
else {
    //other browser tested on IE 11
    var result = "data:application/vnd.ms-excel," + encodeURIComponent(tab_text);
    that.href = result;
    that.download = document.title + ".xls";
    return true;
}
}

Bir iframe gerektirir

<iframe id="myIframe" style="opacity: 0; width: 100%; height: 0px;" seamless="seamless"></iframe>

Kullanım

$("#btnExportToExcel").click(function () {
    exportToExcel(this, '#mytable');
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.