Exportando pra Excel em ASP

Essa 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>
Abrir no navegador Código fonte (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.



  Dados com tipos misturados  
<% Response.ContentType= "application/vnd.ms-excel" %>
<html>
  <head>
    <title>Exportar pra Excel - Dados misturados</title>
    <style type="text/css">
      .FmtTexto    {mso-number-format:\@}
      .FmtData     {mso-number-format:"dd\/mm\/yyyy"}
      .FmtNumero   {mso-number-format:"0\.00"}
      .FmtContabil {mso-number-format:"currency"}
    </style>
  </head>
  <body>
    <table>
       <tr>
          <td style="color: White; background-color: Silver"><b>Texto</b></td>
          <td style="color: White; background-color: Silver"><b>Data</b></td>
          <td style="color: White; background-color: Silver"><b>Número (2 casas)</b></td>
          <td style="color: White; background-color: Silver"><b>Contábil</b></td>
       </tr>
       <tr>
          <td align="right" class="FmtTexto">1234</td>
          <td align="right" class="FmtData">24/12/2005</td>
          <td align="right" class="FmtNumero">1234,57</td>
          <td align="right" class="FmtContabil">1234,57</td>
       </tr>
       <tr>
          <td align="right" class="FmtTexto">Texto</td>
          <td align="right" class="FmtData">21/01/2006</td>
          <td align="right" class="FmtNumero">1001,459</td>
          <td align="right" class="FmtContabil">1001,459</td>
       </tr>
       <tr>
          <td align="right" class="FmtTexto">33YY1234</td>
          <td align="right" class="FmtData">14-02-2006</td>
          <td align="right" class="FmtNumero">99999,454</td>
          <td align="right" class="FmtContabil">99999,454</td>
       </tr>
    </table>
  </body>
</html>
Abrir no navegador Código fonte (0,50 Ko)





http://transeberiano.brinkster.net