Página 1 de 1

Gerar Documento Word

Enviado: 10 Dez 2007 16:05
por asimoes
Pessoal,

Alguém tem alguma rotina para gerar um documento word com as formações de fonte, tamanho de página e orientação.

:)Pos []´s

Enviado: 10 Dez 2007 16:34
por Luciano Bonfim

Código: Selecionar todos


PROCEDURE geraWord( cARQ )
local x,atu:=0,pos:=0,arq,valbuf,buffer,bytes,bloco,ch,linhaImpressao
LOCAL oWord, oText
PRIVATE oDlgHabla:=NIL
TRY
   oWord := GetActiveObject( "Word.Application" )
CATCH
   TRY
      oWord := CreateObject( "Word.Application" )
   CATCH
      avi_rep("Não foi Possivel Achar o Word Instalado")
      IF oDlgHabla#NIL
        oDlgHabla:CLOSE()
      ENDIF
      RETURN
   END
END

oWord:Documents:Add()
oText := oWord:Selection()
oText:Font:Name := "Lucida Console"
oText:Font:Size := 8
oText:Font:Bold := .F.

valbuf = 11000
arq=FOPEN(cArq,0)
do while .t.
   buffer=SPACE(valbuf)
   FSEEK(arq,atu,0)
   bytes=FREAD(arq,@buffer,valbuf)
   pos=AT(CHR(12),buffer)
   if bytes=0 .OR. pos=0
      exit
   endif
   bloco=substr(buffer,1,pos)
   linhaImpressao=""
   for x=1 to len(bloco)
      ch=substr(bloco,x,1)
      do case
      // para o word fica mais rápido mandar de pagina em pagina em vez de linha em linha
      //case ch = FIM_LINHA
         //oText:Text += HB_OemToAnsi(strtran(linhaImpressao,chr(13),"")) + CRLF
         //linhaImpressao=""
      case ch = FIM_PAGINA
         oText:Text += HB_OemToAnsi(strtran(linhaImpressao,chr(13),"")) + chr(10)+chr(12)
         linhaImpressao=""
      otherwise
         linhaImpressao+=ch
      endcase
   next
   atu=atu+pos
enddo
oWord:Visible := .T.
oWord:WindowState := 1
IF oDlgHabla # NIL
   oDlgHabla:CLOSE()
ENDIF
RETURN


Enviado: 10 Dez 2007 16:36
por Luciano Bonfim
em tempo:

#define FIM_LINHA chr(10)
#define FIM_PAGINA chr(12)
#define CRLF Chr(13) + Chr(10)

Enviado: 10 Dez 2007 20:20
por asimoes
Valeu Luciano,

Quanto a orientação, lasdscape ou portrait como seria?

:)Pos

Enviado: 10 Dez 2007 22:02
por Luciano Bonfim
ai vc me pegou.. näo sei...

se descobrir pota aqui que eu tb queria saber...

Enviado: 11 Dez 2007 00:36
por asimoes
Segue ai a dica,

oWord:Selection():PageSetup():Orientation():=0 //Portrait e 1 para LandScape


[]´s :)Pos

Enviado: 11 Dez 2007 00:41
por asimoes
Segue ai a dica,

oWord:Selection():PageSetup():Orientation():=0 //Portrait e 1 para LandScape


[]´s :)Pos

Enviado: 11 Dez 2007 00:48
por asimoes
Mais uma dica : as margens:

oText := oWord:Selection()

oText:PageSetup():Orientation():=2 //LandScape

oText:PageSetup():TopMargin():=1
oText:PageSetup():BottomMargin():=1
oText:PageSetup():LeftMargin():=1
oText:PageSetup():RightMargin():=1
:)Pos

Enviado: 11 Dez 2007 10:39
por Luciano Bonfim
Amigo,

Era exatamente isso que eu tava precisando, landscape e as margens... esse que é o objetivo do compartilhamento do conhecimento, eu mostro meu código pra vc e vc melhora e devolve e assim caminha a humanidade... rsrsrs

Muito Obrigado

Enviado: 11 Dez 2007 10:53
por momente
Excelente dica e solução amigos,

Estava precisando disso!

Valeu!

Enviado: 11 Dez 2007 20:30
por asimoes
Amigos mais uma dica:

Definir o papel: A4 ou Carta

* A4
* LandScape
* Largura: 841.95
* Altura : 595.35
* Portrait
* Largura: 595.35
* Altura : 841.95

* Carta
* LandScape
* Largura: 792.1
* Altura : 612.1
* Portrait
* Largura: 612.1
* Altura : 792.1

oText:PageSetup():PageWidth:=841.95
oText:PageSetup():PageHeight:=595.35

:)Pos