Exportando pra Excel em ASP

Esta aplicação requer que o MS Excel esteja instalado na máquina cliente.

As únicas coisas a serem feitas pra exportar pro Excel são: montar uma tabela (<table>) com os dados e inserir Response.ContentType= "application/vnd.ms-excel" no topo da página.



default.asp
<% Response.ContentType= "application/vnd.ms-excel" %>
<html>
   <head>
      <title>Exportando pra Excel</title>
   </head>
   <body>
      <table>
         <tr>
            <td style="color: White; background-color: Silver"><b>Cidade</b></td>
            <td style="color: White; background-color: Silver"><b>Estado</b></td>
            <td style="color: White; background-color: Silver"><b>DDD</b></td>
         </tr>
         <tr>
            <td>Brasília</td>
            <td>DF</td>
            <td>61</td>
         </tr>
         <tr>
            <td>Cuiabá</td>
            <td>MT</td>
            <td>65</td>
         </tr>
         <tr>
            <td>Curitiba</td>
            <td>PR</td>
            <td>41</td>
         </tr>
         <tr>
            <td>Florianópolis</td>
            <td>SC</td>
            <td>48</td>
         </tr>
         <tr>
            <td>Recife</td>
            <td>PE</td>
            <td>81</td>
         </tr>
      </table>
   </body>
</html>
Clique aqui pra abrir no navegador
Clique aqui pra baixar o código (0,41 Ko)




Exportação pro Excel - Tipos misturados - Excel mixed data types

O Excel filtra automaticamente a tabela pra identificar o tipo de cada coluna. Por padrão, ele pega as oito primeiras linhas da tabela.

O problema é que nem sempre uma tabela é identificada assim tão simplesmente.
Se as 8 primeiras linhas duma coluna são números e a partir da 9a é texto, o Excel vai "identificá-la" como sendo do tipo NÚMERO e descartar todas as linhas texto dessa coluna (porque os textos serão considerados números inválidos).

A solução pra se exportar pra Excel corretamente é criar um estilo e atribuir cada coluna com o tipo esperado (no caso acima, tipo TEXTO).
Ocorre problemas também com valores do tipo MOEDA, geralmente ele converte pra tipo REAL.

O mso-number-format define a formatação de tipos suportada pelo Excel.



<% Response.ContentType= "application/vnd.ms-excel" %>
<html>
  <head>
    <title>Exportar pra Excel - Dados misturados</title>
    <style type="text/css">
      td.FmtTexto {mso-number-format:\@}
      td.FmtMoeda {mso-number-format:"0\.00"}
      td.FmtData  {mso-number-format:"dd\/mm\/yyyy"}
    </style>
  </head>
  <body>
    <table>
      <tr>
        <td style="color: White; background-color: Silver"><b>Texto</b></td>
        <td style="color: White; background-color: Silver"><b>Moeda</b></td>
        <td style="color: White; background-color: Silver"><b>Data</b></td>
      </tr>
      <tr>
        <td align="right" class="FmtTexto">1234</td>
        <td align="right" class="FmtMoeda">1234,57</td>
        <td align="right" class="FmtData">24/12/2005</td>
      </tr>
      <tr>
        <td align="right" class="FmtTexto">Texto</td>
        <td align="right" class="FmtMoeda">1001,459</td>
        <td align="right" class="FmtData">21/01/2006</td>
      </tr>
      <tr>
        <td align="right" class="FmtTexto">33YY1234</td>
        <td align="right" class="FmtMoeda">99999,73</td>
        <td align="right" class="FmtData">14-02-2006</td>
      </tr>
    </table>
  </body>
</html>
Clique aqui pra abrir no navegador
Clique aqui pra baixar o código (0,50 Ko)





http://transeberiano.brinkster.net