Gerando XLS simples com dados de tabelas DBF

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Gerando XLS simples com dados de tabelas DBF

Mensagem por rochinha »

Amiguinhos

Vejam uma forma de gerar arquivo XLS de forma rapida.

Basta usar o esquema de HTML e jogar a lista de dados para o Excel se virar.

Exemplo:

Código: Selecionar todos

<html>
<body>
<table border="1">
<!-- cabecalho com os nomes dos campos da tabela -->
<tr>
<th nowrap>Time</th>
<th nowrap>Pontos</th>
<th nowrap>Jogos</th>
<th nowrap>Vitorias</th>
<th nowrap>Empates</th>
<th nowrap>Derrotas</th>
</tr>
<!-- cada registro da tabela deve estar dentro das tags TR -->
<tr>
<td align="right">Corinthians</td>
<td align="right">12</td>
<td align="right">8</td>
<td align="right">3</td>
<td align="right">2</td>
<td align="right">1</td>
</tr>
<tr>
<td align="right">Sao Paulo</td>
<td align="right">16</td>
<td align="right">4</td>
<td align="right">7</td>
<td align="right">6</td>
<td align="right">3</td>
</tr>
<tr>
<td align="right">Santos</td>
<td align="right">10</td>
<td align="right">9</td>
<td align="right">4</td>
<td align="right">3</td>
<td align="right">6</td>
</tr>
<tr>
<td align="right">Palmeiras</td>
<td align="right">12</td>
<td align="right">5</td>
<td align="right">3</td>
<td align="right">2</td>
<td align="right">1</td>
</tr>
</table>
</body>
</html>
Basta gerar o conteudo como o exemplo acima e salvar com extensão XLS.

@braços : ? )
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Cara! E não é que funciona mesmo!
Valeu pela dica, Mestre Rochinha.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
RenatoReis
Usuário Nível 1
Usuário Nível 1
Mensagens: 38
Registrado em: 02 Out 2006 17:04

Mensagem por RenatoReis »

Gero arquivos pára o Banco Central e também já fazia assim.
Pra completar, tem um editor de arqs. XML que é muito bom é o PXE. É fácil de encontrar pelo google, mas se não conseguir, me solicite que eu envio. Abcs.
Sempre que um inimigo estiver cometendo um erro, jamais o interrompa!
(Napoleão Bonaparte)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Gerando XLS simples com dados de tabelas DBF

Mensagem por asimoes »

Olá a Todos,

Eu sabia que tinha algum exemplo relacionado ao xls vejam o código:

Obs.: Serve para clipper e xharbour.

XLS.CH:

Código: Selecionar todos

//----------------------------------------------------------
// XLS.CH
// 
// TXls es una clase escrita en Clipper, basada en Objects
// que permite generar archivos Microsoft Excel 2.0 en
// forma nativa ( sin usar Automatizacion y ni siquiera
// tener Excel instalado )
//
// Basado en la implementacion en Visual Basici de
// Mark O'Brien. Microsoft Corporation
//
// Version Clipper :
//Yamil Bracho  (brachoy@pdvsa.com)
// Nov,1999
// Caracas, Venezuela
//----------------------------------------------------------

#xcommand OPEN XLS <oXls>  ;
         FILENAME <cFileName>  ;
=> ;
    <oXls> := TXls():New( <cFileName>, .T. )

#xcommand @ <nRow>, <nCol> SAY <cMsg> ;
    <of:OF> <oXls> ;
=> ;
   <oXls>:Write( <nRow>, <nCol>, <cMsg> )

#xcommand CLOSE XLS <oXls> ;
=> ;
         <oXls>:Close()

Demonstração do XlSFUNC

Código: Selecionar todos

#include "xls.ch"
#define TXT_ELEMS   12
#define TXT_OPCO1    1
#define TXT_OPCO2    2
#define TXT_LEN1     3
#define TXT_LEN2     4
#define TXT_ROW1     5
#define TXT_ROW2     6
#define TXT_COL1     7
#define TXT_COL2     8
#define TXT_RGBAT1   9
#define TXT_RGBAT2  10
#define TXT_RGBAT3  11
#define TXT_LEN     12

//---------------------------------------------------------
// DemoFunc.PRG
// Demostracion de xlsFunc
//
// xlsFunc es una conjunto de rutinas para generar archivos
// Microsoft Excel 2.0 en forma nativa ( sin usar
// Automatizacion y ni siquiera tener Excel instalado )
//
// Basado en la implementacion en Visual Basici de
// Mark O'Brien. Microsoft Corporation
//
// Version Clipper :
// Yamil Bracho  (brachoy@pdvsa.com)
// Nov,1999
// Caracas, Venezuela
//---------------------------------------------------------

function main()
  local nXls
  local f
  local i
  local aData := { { "Venezuela", "Caracas",          100 } ,;
                   { "Peru",      "Lima",             200 } ,;
                   { "Colombia",  "Bogota",           300 } ,;
                   { "Argentina", "Buenos Aires",     400 } ,;
                   { "Chile",     "Santiago",         500 } ,;
                   { "Brasil",    "Brasilia",         600 } ,;
                   { "Argentina", "Buenos Aires",     700 } ,;
                   { "Canada",    "Ottawa",           800 } ,;
                   { "Mexico",    "Ciudad de Mexico", 900 } }


  nXls := xlsOpen( "Pais.xls" )

  xlsWrite( nXls, 1, 1, "Pais" )
  xlsWrite( nXls, 1, 2, "Capital" )
  xlsWrite( nXls, 1, 3, "Poblacion" )

  f := 2
  for i:=1 to Len( aData )
    xlsWrite( nXls, f, 1, aData[ i , 1 ] )
    xlsWrite( nXls, f, 2, aData[ i , 2 ] )
    xlsWrite( nXls, f, 3, Ltrim( Str( aData[ i , 3 ] )))

    f++
  next i

  xlsClose( nXls )
return nil

FUNCTION xlsOpen(cFile)

LOCAL nHandle
LOCAL cBof    := CHR(9)+CHR(0)+CHR(4)+CHR(0)+;
                   CHR(2)+CHR(0)+CHR(10)+CHR(0)

nHandle := FCREATE(cFile)
FWRITE(nHandle,cBof,LEN(cBof))
RETURN nHandle

FUNCTION xlsClose(nHandle)

LOCAL cEof := CHR(10)+CHR(0)+CHR(0)+CHR(0)

FWRITE(nHandle,cEof,LEN(cEof))
FCLOSE(nHandle)
RETURN nil

FUNCTION xlsWrite(nHandle,nRow,nCol,cString)

LOCAL anHeader
LOCAL nLen
LOCAL nI

//---------------------------------------------------
// Arreglo para almacenar el marcador de registro
// etiqueta
//---------------------------------------------------
anHeader               := ARRAY(TXT_ELEMS)
anHeader[ TXT_OPCO1 ]  := 4
anHeader[ TXT_OPCO2 ]  := 0
anHeader[ TXT_LEN1 ]   := 10
anHeader[ TXT_LEN2 ]   := 0
anHeader[ TXT_ROW2 ]   := 0
anHeader[ TXT_COL2 ]   := 0
anHeader[ TXT_RGBAT1 ] := 0
anHeader[ TXT_RGBAT2 ] := 0
anHeader[ TXT_RGBAT3 ] := 0
anHeader[ TXT_LEN ]    := 2

nLen := LEN(cString)

//------------------------------
// Longitud del texto a escribir
//------------------------------
anHeader[ TXT_LEN ] := nLen

//----------------------
// Longitud del registro
//----------------------
anHeader[ TXT_LEN1 ] := 8+nLen

//---------------------------------------------
// En le formato BIFF se comienza desde cero y
// no desde 1 como estamos pasando los datos
//---------------------------------------------
nI                   := nRow - 1
anHeader[ TXT_ROW1 ] := nI - (INT(nI / 256) * 256)
anHeader[ TXT_ROW2 ] := INT(nI / 256)
anHeader[ TXT_COL1 ] := nCol - 1

//-------------------
// Escribe encabezado
//-------------------
AEVAL(anHeader,{| v | FWRITE(nHandle,CHR(v),1)})

//-----------------------------------------------------
// Escribe la data
//-----------------------------------------------------
FOR nI := 1 TO nLen
   FWRITE(nHandle,SUBSTR(cString,nI,1),1)
NEXT nI
RETURN nil

►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder