6
respostas

Exportar para excel

Boa dia pessoal.

Estou precisando de uma ajudinha, preciso exportar uma tabela com vários anos para o excel. Tenho uma tela com abas representando os anos de 2016,2017, 2018. Ao clicar na aba do ano aparece a tabela com os dados daquele ano, a partir de então clico no botão Exportar e a exportação é feita, mas atualmente só está considerando o ano de 2018. Preciso levar em consideração os anos de 2016 e 2017 no excel.

Vejam como está atualmente:

var tableToExcel = (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" > ' + '

<!--[if gte mso 9]><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}' + '<x:WorksheetOptions><x:DisplayGridlines/></x: ExcelWorksheet></x: ExcelWorksheets></x: ExcelWorkbook>' + '<![endif]-- >
{table}' , 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, filename) { //var alo = "babum.xls"; if (!table.nodeType) table = document.getElementById(table)
    var tableClone = $(table).clone();

    tableClone.find(".colSelecionar").remove();

    var ctx = { worksheet: name || 'Worksheet', table: tableClone.html() }
    //window.location.href = uri + base64(format(template, ctx))

    var blob = new Blob([format(template, ctx)], { type: "application/vnd.ms-excel" });
    window.URL = window.URL || window.webkitURL;
    link = window.URL.createObjectURL(blob);
    a = document.createElement("a");
    a.download = filename + "_" + getDate() + ".xls";
    a.href = link;

    document.body.appendChild(a);

    a.click();

    document.body.removeChild(a);
}

})();

A função chamada acima getDate() está pegando apenas o ano de 2018, veja:

function getDate() { var d = new Date();

var month = d.getMonth() + 1;
var day = d.getDate();


var output = d.getFullYear() + '/' +
    (('' + month).length < 2 ? '0' : '') + month + '/' +
   (('' + day).length < 2 ? '0' : '') + day;


return output;

}

Como faço para modificar de tal forma que ao clicar no botão exportar seja considerado os demais anos e não apenas 2018? Alguém poderia me ajudar?

Desde já agradeço. Flávia

6 respostas

Oi pessoal.

Consegui evoluir mas ainda não cheguei na solução. Alterei o método getDate() para: function getDate() { var d = new Date();

var month = d.getMonth() + 1;
var day = d.getDate();
var ano= $("#divAbas li.active a").text();

    var output = ano + '/' +
        (('' + month).length < 2 ? '0' : '') + month + '/' +
        (('' + day).length < 2 ? '0' : '') + day;
    return output;

}

Desta forma pego o ano da aba que está ativa, sendo que o conteúdo de cada ano não está correto. Estou conseguindo passar o ano corretamente como parametro para o nome do arquivo exportado. Tenho que alterar alguma coisa no download da outra função. Pois na verdade estou querendo que ao clicar no botão Exportar seja exibida no excel 3 abas uma para cada ano. Não sei se consegui ser clara?

Obrigada, Flavia

Oi Flavia eu entendi seu problema. Mas a solução não é bem simples. o getdate() só serve para montar o nome do arquivo nessa linha

    a.download = filename + "_" + getDate() + ".xls";

não estando relacionado a geração do arquivo .xls . O que você tem que fazer é montar uma aba onde tenha os 3 anos e então aplicar a função de exportar para xls, pois essa função só está exportando a aba selecionada.

Bom dia André.

Entendi. Mas o ideal seria montar uma aba para cada ano no excel ao exportar. Sou iniciante nesta área e tudo que aprendi foi com os cursos da Alura. Neste caso a montagem da minha tabela é dinâmica, teria que monta-lá na exportação para os três anos? Teria algum exemplo de exportação de tabela com abas para excel?

Obrigada. Flávia

Olá pessoal.

Achei uma estrutura parecida com a minha neste artigo. Para cada aba tenho referências correspondentes a anos (2016,2017 e 2018) em cada aba. Vejam a estrutura(desenho), o código não importa muito, pois o meu está diferente: https://www.devmedia.com.br/criando-uma-estrutura-de-abas-com-html-css-e-jquery/24693

O que quero fazer é exportar para um arquivo Excel , onde no mesmo terei 3 abas cada uma com o ano correspondente. Acho que assim ficou mais claro, se alguém puder me ajudar. Sou iniciante na área e estou com dificuldades. Como estou mantendo um projeto tentarei trabalhar com a estrutura que passei a vocês.

Desde já agradeço. Flávia

Esse plugin https://github.com/jmaister/excellentexport faz o que você procura. Dá uma olhada, se tiver alguma dúvida pergunta pra gente.

Muito obrigada André. Vou dar uma pesquisada.

Flávia