HTML-таблица для Excel с помощью jquery

У меня есть эта функция jquery, которая работает, за исключением того, что мне нужно что-то добавить. У меня есть настройка фильтра в таблице, чтобы скрыть столбцы. Когда я скрываю столбцы и нажимаю «Экспорт», он использует все поля независимо. Как мне экспортировать только те столбцы таблицы, которые не скрыты?

var write_to_excel = (function() {
    var uri = '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>{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];
            })
        }
        return function(table, name) {
            if (!table.nodeType) table = document.getElementById(table) var ctx = {
                worksheet: name || 'Worksheet',
                table: table.innerHTML
            }
            window.location.href = uri + base64(format(template, ctx))
        }
})()​

Я думаю, что мне нужно что-то вроде.

if($(table).display.style!="none")

Заранее спасибо.


person user1497166    schedule 02.07.2012    source источник
comment
Вам придется перебирать строки таблицы и экспортировать HTML для каждой ячейки, в зависимости от того, виден ли столбец ячейки или нет.   -  person Tim Williams    schedule 03.07.2012


Ответы (2)


Самый простой способ — просто удалить столбцы из таблицы, прежде чем передать ее функции форматирования. Поскольку вы все равно выбрасываете страницу, чтобы перейти к URI данных, не важно сохранять скрытые столбцы.

То, как вы удаляете скрытые столбцы, зависит от того, как эти столбцы сделаны скрытыми в первую очередь. Если это просто применение display:none к скрытым TD, вы можете сделать это, внеся это изменение в код.

    return function(table, name) {
        if (!table.nodeType)
            table = document.getElementById(table);

        $(table).find(':not(:visible)').remove();

        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML
        };

        window.location.href = uri + base64(format(template, ctx));
    };
person Tmdean    schedule 02.07.2012

Или вы можете использовать простой jQuery для экспорта содержимого таблицы в формат Excel, используя метод window.open(). Это также упростит решение проблемы display:none :)

window.open(MIMEtype,replace);

MIMEtype: необязательно. Тип документа, в который вы пишете. Значение по умолчанию — «текст/html».

заменить: необязательно. Если установлено, запись истории для нового документа наследует запись истории из документа, который открыл этот документ.

Ниже код jQuery экспортирует данные таблицы в Excel.

$("#btnExport").click(function(e) {
    window.open('data:application/vnd.ms-excel,' + $('#dvData').html());
    e.preventDefault();
});

Если ваша таблица HTML содержит специальные символы, то перед отправкой html в excel ее необходимо закодировать.

$("#btnExport").click(function(e) {
    window.open('data:application/vnd.ms-excel,' + encodeURIComponent($('#dvData').html()));
    e.preventDefault();
});​

Пример jsFiddle — http://jsfiddle.net/jquerybyexample/xhYcD/

person Jose Philip Raja    schedule 01.03.2013
comment
Все пробелы в результате волшебным образом исчезают в моем случае. У вас есть похожая проблема? - person Vlado; 09.06.2016