1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Exportar para csv

Como faço uma exportação de uma tabela html para um arquivo CSV?

No meu código abaixo estou salvando o arquivo csv, porém ao abrir no excel não apresenta as divisões de colunas.

Esse problema é apresentado apenas no IE.

Segue meu código:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Export table to Excel in 10 lines</title>


<script>

function Exportar()
{
    var textRange; var j=0;
    var tab = document.getElementById("Tabela"); // id da tabela
    if(document.getElementById("Tabela").rows.length < 2){
        alert("Por favor, realizar uma pesquisa antes de exportar.");
    }
    else{
        var a=[], csv='', LF='\r\n', r, c, rs, cs, row, cell, i, j, v;

        for (r=0; r<tab.rows.length; r++){
            row = tab.rows[r];

            for (c=0; c<row.cells.length; c++){
                cell = row.cells[c];
                rs = cell.rowSpan+r;
                cs = cell.colSpan+c;

                for (i=r; i<rs; i++){
                    if (!a[i]){
                        a[i]=[];
                    }

                    for (j=c; j<cs; j++){
                        a[i].push(i>r || j>c ? '' : cell.innerHTML);
                    }
                }
            }
        }



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

        if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // Se for Internet Explorer
        {
            for (r=0; r<a.length; r++){
                v = '';
                for (c=0; c<a[r].length; c++){
                    csv += (v + a[r][c]);
                    v = ';';
                }
                csv += '\r\n';
            }

            txtArea1.document.open("txt/html","replace");
            txtArea1.document.write(csv);
            txtArea1.document.close();
            txtArea1.focus(); 
            sa = txtArea1.document.execCommand("SaveAs",true,"Socilitações.csv");    

        }  
        else
            for (r=0; r<a.length; r++){
                v = '';
                for (c=0; c<a[r].length; c++){
                    csv += (v + a[r][c]);
                    v = ';';
                }
                csv += "%0A";
            }    

            var a         = document.createElement('a');
            a.href        = 'data:attachment/csv,' + csv;
            a.target      = '_blank';
            a.download    = 'Solicitações.csv';

            document.body.appendChild(a);
            a.click();
            //sa = window.open('data:attachment/csv,' + encodeURIComponent(csv));  

        return (sa);
    }
}

</script>
</head>

<body>
    <button onclick="Exportar()">Exportar</button>
    <br/>
    <span>
    <table id="Tabela">
        <tr>
            <td>1</td>
            <td>2</td>
        </tr>
        <tr>
            <td>3</td>
            <td>4</td>
        </tr>
        <tr>
            <td>5</td>
            <td>6</td>
        </tr>
    </table>
    <iframe id="txtArea1" style="display:none"></iframe>
    </span>
</body>
</html>

Podem me ajudar?

Obrigado.

  • csv é um documento de texto em que os registros são separados por vírgula (ou ponto e vírgula). Não entendi o que você tentou fazer com as tags (como table e tr), já que elas não são necessárias na separação no csv. Por exemplo, as tabuadas do 2 e 3 poderiam ocupar duas linhas de um arquivo csv com o seguinte:

    2;4;6;8;10;12;14;16;18;20
    3;6;9;12;15;18;21;24;27;30
    TerraSkilll   18 de fev de 2015
  • Sim... como disse, no meu código estou gerando em html e quando abro no excel apresenta uma mensagem. Eu consegui criar minha tabela com os separadores ponto e vírgula ";". Se achar necessário eu coloco o código. Meu maior problema é como salvar o arquivo .csv.

    Douglas Gripp Emerick   18 de fev de 2015
  • TerraSkilll, adicionei novamente o código junto com uma pagina de teste html. Meu problema é na hora de salvar e abrir o arquivo. O excel não respeita os ";" para separar as colunas.

    Douglas Gripp Emerick   18 de fev de 2015
  • Pois é tchê, aqui no meu Linux+Firefox+LibreOffice funcionou bem, sugeriu abrir com Libre Calc com diálogo para delimitadores e mais. Um detalhe que no Excel o delimitador padrão é o comma mesmo, ou seja, vírgula em vez de ponto e vírgula. Quem sabe vale um teste?

    Márcio Torres   18 de fev de 2015
  • Márcio, tentei colocar a vírgula e também não abre corretamente. O arquivo até fica com o logo do excel e quando clico para abrir, ele abre normalmente no excel. O problema é que não separa nas células os campos. Fica na primeira célula a string 1;2;3 etc...

    Douglas Gripp Emerick   18 de fev de 2015
Mostrar todos os 10 comentários>
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags javascript jquery java ou faça a sua própria pergunta.