ASP - Gerando um arquivo texto com FileSystemObject e abrindo no Excel


Nesta dica eu vou mostrar como podemos gerar um arquivo texto a partir de um banco de dados Access e a seguir abrir o arquivo no Excel ; tudo isto usando o seu navegador padrão para executar uma página ASP. As etapas são as seguintes:

1- Em um formulário - geratxt.htm - você informa :

2- Após clicar no botão enviar do formulário - geratxt.htm - o arquivo criaarquivo.asp será executado e teremos:

Onde : request("nometxt") é o nome do arquivo informado no formulário

filePath= Server.mapPath("\")
filename=filePath & "\" & fileExcel

Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set MyFile = fs.CreateTextFile(filename, True)

Set cn = Server.CreateObject("ADODB.Connection")

DB="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & request("nomebd")
SQL = " Select * from " & request("nometbl")

cn.Open DB

Ao executar o formulário geratxt.htm teremos a seguinte tela:

Após informar os valores e clicar no botão - Enviar - teremos:

Se você clicar no link - Abrir o arquivo no Excel - e a seguir em Abrir terá o arquivo exibido conforme abaixo:

O código do formulário geratxt.htm é o seguinte:

<html>
<head>
<title>Documento sem t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#33FFFF" text="#000066">
<form name="frmArquivo" method="post" action="criaarquivo.asp">
<h1 align="center"><font color="#0000FF" size="4" face="Verdana, Arial, Helvetica, sans-serif">Gerar
Arquivo Texto</font></h1>
<table width="100%" border="0" cellpadding="1">
<tr>
<td width="22%"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Nome
do arquivo Texto :</font></td>
<td colspan="2"><input name="nometxt" type="text" value="Teste_1" size="50" maxlength="50">
<font color="#0033CC" size="1" face="Arial, Helvetica, sans-serif">(Informe um nome sem usar extens&atilde;o)</font></td>
</tr>
<tr>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Nome da
base de dados</font></td>
<td colspan="2"><input name="nomebd" type="text" value="c:\teste\Biblio.mdb" size="50" maxlength="50">
<font color="#0033FF" size="1" face="Arial, Helvetica, sans-serif">(Informe o caminho e nome da
base de dados)</font></td>
</tr>
<tr>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Nome da
Tabela</font></td>
<td colspan="2"><input name="nometbl" type="text" value="Authors" size="50" maxlength="50">
<font color="#3333FF" size="1" face="Arial, Helvetica, sans-serif">(Informe o nome da tabela na
base de dados)</font></td>
</tr>
<tr>
<td> <div align="center"> </div></td>
<td width="12%"><input type="submit" name="Submit2" value="Enviar"></td>
<td width="66%"><input type="reset" name="Submit" value="Limpar"></td>
</tr>
</table>
</form>
</body>
</html>
 

O código completo do arquivo - criaarquivo.asp - é dado a seguir:

<%@ LANGUAGE="VBSCRIPT" %>

<HTML>
<HEAD>
<TITLE>Cria um arquivo texto usando o FileSystemObject que pode ser aberto no Excel</TITLE>
</HEAD>
<body>

<%

'obtem o nome do arquivo informado
fileExcel = request("nometxt") & ".xls"

'Substitua a barra invertica (\) pelo nome do seu diretorio virtual.
'a barra invertida indica que o arquivo vai ser procurado em wwwroot

filePath= Server.mapPath("\")
filename=filePath & "\" & fileExcel

'Cria o arquivo com extensão .xls usando o objeto FileSytemObject
'Se o arquivo não exisitir o parametro TRUE irá permitir a sua criacao
'Esteja certo que o usuario tenha permissao para escrita no diretorio onde o

'arquivo vai ser criado
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set MyFile = fs.CreateTextFile(filename, True)

'Abre a conexão e retorna os dados do banco de dados
Set cn = Server.CreateObject("ADODB.Connection")

'Estou usando um provedor OLE DB para efetuar a conexao com o arquivo
'voce pode usar um DSN ( a linha comentada mostra a sintaxe para a conexao)
'cn.Open "DSN=dsn_biblio;UID=;PWD=;DATABASE=Biblio"
DB="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & request("nomebd")
SQL = " Select * from " & request("nometbl")

cn.Open DB
Set rs = cn.Execute(SQL)

strLine="" 'incializa a variavel para armazenar o nome dos campos

For each x in rs.fields
  'separa os nomes dos campos com um tab para que eles possam aparecer me colunas diferentes no Excel
 
strLine= strLine & x.name & chr(9)
Next

'escreve a string no arquivo
MyFile.writeline strLine

'retorna os valores do banco de dados e escreve no arquivo
Do while Not rs.EOF
  strLine=""
  for each x in rs.Fields
     strLine= strLine & x.value & chr(9)
  next
  MyFile.writeline strLine
  rs.MoveNext
Loop

'limpa o objeto
MyFile.Close
Set MyFile=Nothing
Set fs=Nothing
%>
<table width="100%" border="0" cellpadding="1">
<tr bgcolor="#00FF66">
<td colspan="2">
<div align="center"><font color="#CC6600" size="5" face="Verdana, Arial, Helvetica, sans-serif"><strong>Arquivo
Texto gerado com sucesso.</strong></font></div></td>
</tr>
<tr>
<td colspan="2"><hr> </td>
</tr>
<tr bgcolor="#00FF66">
<td width="49%">
<div align="center"><font size="3" face="Verdana, Arial, Helvetica, sans-serif">
<%'exibe um link para abrir o arquvo no Excel
link="<A HREF=" & fileExcel & ">Abrir o arquivo no Excel</a>"
Response.write link

%>
</font></div></td>
<td width="51%">
<div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong><a href="http://localhost/geratxt.htm">retorna</a></strong></font></div></td>
</tr>
</table>
</BODY>
</HTML>

O código esta comentado e eu vou ficando por aqui...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti