Clipper On Line • Ver Tópico - gerar arquivos em word usando harbour
Página 1 de 4

gerar arquivos em word usando harbour

MensagemEnviado: 16 Mai 2013 18:00
por Amparo
ola amigos

preciso da ajuda dos colegas, em meu sistema tenho que gerar arquivo de contrato de comodato, preciso gerar este arquivo no WORD, baixei um exemplo neste forum, montei o arquivo em TXT e depois executo o WORD para abrilo, o arquivo esta sendo aberto no WORD so que sem nenhuma formataçao, gostaria que algum colega pudesse disponibilizar algum exemplo de como poço gerar o arquivo, mas configurando a fonte, a margem esquerda a margem direita a altura do formulario e se é possivel criar um cabeçalho anexando uma figura. tenho algumas linha que vou utilizar fonte do tamanho 6 outras 10

isso tudo é possivel ou é piraçao minha?

segue o exemplo que peguei no forum

Function Abre_word(CPASTA, CARQ)
Local oWord
Local oFILE
Local ArqDoc

oFILE  := CPASTA + cARQ
cARQ   := CPASTA + cARQ + ".TXT"
ArqDoc := oFILE + ".doc"

Copy File (cARQ) TO (oFILE)

RenameFile( oFILE, ArqDoc )

oWord:=TOleAuto():New( "Word.Application" )
oWord:Documents:Open( ArqDoc )
oWord:WindowState := 1
oWord:Visible := .t.
   
Return nil

tinha pego este outro so que na hora de compilar deu erro nas funcoes abaixo, acho que faltou declarar alguma lib so nao sei qual.

estou usando o Harbour 3.0.0 (Rev. 16951), tentei compilar com o Harbour 3.2.0dev (r1304291617) e tambem deu erro

Error: Unresolved external '_HB_FUN_FT_FUSE' referenced from C:\FONTES\HARBOUR\SIGECOM\.HBMK\WIN\BCC\PRINTSERV.OBJ
Error: Unresolved external '_HB_FUN_FT_FEOF' referenced from C:\FONTES\HARBOUR\SIGECOM\.HBMK\WIN\BCC\PRINTSERV.OBJ
Error: Unresolved external '_HB_FUN_FT_FREADLN' referenced from C:\FONTES\HARBOUR\SIGECOM\.HBMK\WIN\BCC\PRINTSERV.OBJ
Error: Unresolved external '_HB_FUN_FT_FSKIP' referenced from C:\FONTES\HARBOUR\SIGECOM\.HBMK\WIN\BCC\PRINTSERV.OBJ
FUNCTION Gera_WORD(CPASTA, CARQ,CARQDOC)
LOCAL lWord:=.T.

IF ( oWord := Win_oleCreateObject( "Word.Application" ) ) = Nil
   ALERT( "ATENÇÃO! Word não está  instalado nesta máquina. Não será  possível gerar o documento.")
   lWord:=.F.
ENDIF

IF lWord
   oDoc  := oWord:Documents:Add()
   oText := oWord:Selection()
*   TRY
   oDoc:SaveAs( CPASTA + CARQDOC)
*   CATCH

*   ALERT( "ATENÇÃO! o documento "+ CARQDOC +" está  aberto, feche-o  antes da impressão.")

*   hJanela:=HWG_FindWindow(0 ,cNomeArq+" - Microsoft Word")
*   hwg_BringWindowToTop( hJanela )
*   ShowWindow( hJanela, SW_MAXIMIZE )
*   RETURN .F.
*   END
   
   oWord:Visible := .F.
   oText:PageSetup():Orientation:=0 // 0=Portrait, 1=Landscape
   oText:PageSetup():TopMargin:=30
   oText:PageSetup():BottomMargin:=10
   oText:PageSetup():LeftMargin:=30
   oText:PageSetup():RightMargin:=3
   oText:PageSetup():PageWidth:=595.35
   oText:PageSetup():PageHeight:=841.95
   oText:Font:Name := "Courier New"
   oText:Font:Size := 11
   oText:Font:Bold := .F.
   
   FT_FUSE( CPASTA + CARQ )

   DO WHILE !FT_FEOF()
      cLinha   :=FT_FREADLN()
      lEject   :=(Chr(12) $ cLinha) // Procura caracter EJECT
      lEspecial:=(Chr(27)+"P" $ cLinha)

      IF !lEspecial
         lEspecial:=(Chr(27)+"P"+Chr(15) $ cLinha)
      ENDIF

      * Elimina as formatações ou códigos de impressão
      cLinha:=StrTran(cLinha,Chr(12)) // Elimina caracter EJECT
      cLinha:=StrTran(cLinha,Chr(13))
      cLinha:=StrTran(cLinha,Chr(27)+"P"+Chr(15))
      cLinha:=StrTran(cLinha,Chr(12),Chr(13)+Chr(13))
      cLinha:=StrTran(cLinha,Chr(27)+"P")

      IF lEspecial
         FT_FSKIP()
         LOOP
      ENDIF

      oText:TypeText(cLinha+ hb_eol())

      FT_FSKIP()

      IF lEject .AND. !FT_FEOF()
         oText:InsertBreak(1) //Gera quebra de página no word.
      ENDIF
   ENDDO     

   FT_FUSE()
   oWord:Visible     := .T.
   oWord:WindowState := 1
   oDoc:Save()
   nLinhaWord:=1
   nPaginaWord:=1
   oWord:Selection():GoTo(nLinhaWord,,nPaginaWord) //Posiciona na primeira linha da primeira página
ENDIF

RETURN lWord

gerar arquivos em word usando harbour

MensagemEnviado: 16 Mai 2013 19:05
por Itamar M. Lins Jr.
Tem que linkar a referida LIB.
FT* NANFORUM.

libnf.a se usar mingw, ou libnf.lib se usar BCC.

Saudações,
Itamar M. Lins Jr.

gerar arquivos em word usando harbour

MensagemEnviado: 16 Mai 2013 19:56
por Amparo
ola amigos

Itamar, eu uso o BCC procurei pela lib e nao encontrei achei em uma pasta de teste que tenho no micro e copiei para as pastas da lib em LIB\WIn\BCC e o arquivo sigecom.hbp esta cfe abaixo
-lhbct
-inc
-lxhb
-lhbwin
-llibnf

-oSIGECOM.EXE

MAIN.PRG

AUDIT.PRG

BROWTEXT.PRG

CALCULAR.PRG
CALENDAR.PRG
CLIENTES.PRG

DANFE.PRG
DANFEDIV.PRG
DOCHEQUE.PRG
DOCOMPRA.PRG
DOCONTAS.PRG
DONFISC.PRG
DOPEDIDO.PRG
DOPRODUT.PRG
...


compilando com Harbour 3.0.0 (Rev. 16951) da este erro, sera que esta lib esta desatualiza, voce teria como me mandar?
hbmk2: Harbour: Compilando módulos...
Harbour 3.0.0 (Rev. 16951)
Copyright (c) 1999-2011, http://harbour-project.org/
Compiling 'PRINTSERV.PRG'...
Lines 258, Functions/Procedures 6
Generating C source output to '.hbmk\win\bcc\PRINTSERV.c'... Done.
hbmk2: Compilando...
.hbmk\win\bcc\PRINTSERV.c:
hbmk2: Linkando... SIGECOM.EXE
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_hb_retcAdopt' referenced from C:\HB30\LIB\WIN\BCC\L
IBNF.LIB|fttext
hbmk2: Erro: Executando linkeditor. 2
ilink32.exe @C:\DOCUME~1\Amparo\CONFIG~1\Temp\ejkmx6.lnk

gerar arquivos em word usando harbour

MensagemEnviado: 17 Mai 2013 08:42
por Amparo
ola amigos

Itamar, muito obrigado com sua ajuda consegui criar um arquivo em word, descobri que no meu caso nao é libnf.lib e sim hbnf.lib ja estou conseguindo usar os recursos abaixo:
oText:PageSetup():Orientation:=0 // 0=Portrait, 1=Landscape
oText:PageSetup():TopMargin:=0 //TopMargin:=30
oText:PageSetup():BottomMargin:=0 //BottomMargin:=10
oText:PageSetup():LeftMargin:=0 //LeftMargin:=30
oText:PageSetup():RightMargin:=0 //RightMargin:=3
oText:PageSetup():PageWidth:=595.35 //PageWidth:=595.35
oText:PageSetup():PageHeight:=841.95 //PageHeight:=841.95
oText:Font:Name := "Arial" //"Courier New"
oText:Font:Size := 14
oText:Font:Bold := .F.

mas ainda preciso de muita ajuda para terminar esta rotina, por exemplo:
1) como criar um cabeçalho anexando uma imagem gif, jpeg e outras
2) como mudar a fonte e seu tamanho em determinada linha do arquivo
3) como montar um retangulo como se fosse uma tabela
4) como aciono o negrito, italico e sublinhado para uma determinada linha
5) como tirar o espaçamento estre linha
6) como centralizar ou justificar uma linha

a rotina que estou usando é esta
FUNCTION Gera_WORD( CPASTA, CARQUI )
LOCAL lWord  := .T.
LOCAL ARQTXT := ""
LOCAL ARQWOR := ""

IF ( oWord := Win_oleCreateObject( "Word.Application" ) ) = Nil
   ALERT( "ATENÇÃO! Word não está  instalado nesta máquina. Não será  possível gerar o documento.")
   lWord:=.F.
ENDIF

ARQTXT := CPASTA + CARQUI + ".TXT"
ARQWOR := CPASTA + CARQUI + ".DOC"

IF lWord
   oDoc  := oWord:Documents:Add()
   oText := oWord:Selection()
   oDoc:SaveAs( ARQWOR )
   
   oWord:Visible := .F.
   oText:PageSetup():Orientation:=0                   // 0=Portrait, 1=Landscape
   oText:PageSetup():TopMargin:=0                     //TopMargin:=30
   oText:PageSetup():BottomMargin:=0                  //BottomMargin:=10
   oText:PageSetup():LeftMargin:=0                    //LeftMargin:=30
   oText:PageSetup():RightMargin:=0                   //RightMargin:=3
   oText:PageSetup():PageWidth:=595.35                //PageWidth:=595.35
   oText:PageSetup():PageHeight:=841.95               //PageHeight:=841.95
   oText:Font:Name := "Arial"                         //"Courier New"
   oText:Font:Size := 14
   oText:Font:Bold := .F.
   
   FT_FUSE( ARQTXT )

   DO WHILE !FT_FEOF()
      cLinha   :=FT_FREADLN()
      lEject   :=(Chr(12) $ cLinha) // Procura caracter EJECT
      lEspecial:=(Chr(27)+"P" $ cLinha)

      IF !lEspecial
         lEspecial:=(Chr(27)+"P"+Chr(15) $ cLinha)
      ENDIF

      * Elimina as formatações ou códigos de impressão
      cLinha:=StrTran(cLinha,Chr(12)) // Elimina caracter EJECT
      cLinha:=StrTran(cLinha,Chr(13))
      cLinha:=StrTran(cLinha,Chr(27)+"P"+Chr(15))
      cLinha:=StrTran(cLinha,Chr(12),Chr(13)+Chr(13))
      cLinha:=StrTran(cLinha,Chr(27)+"P")

      IF lEspecial
         FT_FSKIP()
         LOOP
      ENDIF

      oText:TypeText(cLinha+ hb_eol())

      FT_FSKIP()

      IF lEject .AND. !FT_FEOF()
         oText:InsertBreak(1) //Gera quebra de página no word.
      ENDIF
   ENDDO     

   FT_FUSE()
   oWord:Visible     := .T.
   oWord:WindowState := 1
   oDoc:Save()
   nLinhaWord:=1
   nPaginaWord:=1
   oWord:Selection():GoTo(nLinhaWord,,nPaginaWord) //Posiciona na primeira linha da primeira página
ENDIF

RETURN lWord


abraços

gerar arquivos em word usando harbour

MensagemEnviado: 17 Mai 2013 19:11
por Itamar M. Lins Jr.
O macete é usar macros e salvar, depois é só copiar o texto (da macro) para o prg.
Procure pelo excel tem muitos exemplos na internet, tem até para o OpenOffice.

Saudações,
Itamar M. Lins Jr.

gerar arquivos em word usando harbour

MensagemEnviado: 20 Mai 2013 20:22
por Amparo
ola amigos

Itamar, desculpe minha ignorancia mas nao entendi um X do que vc escreveu.

mesmo assim obrigado, vou dar uma pesquisada por ai.

abraços
Amparo

gerar arquivos em word usando harbour

MensagemEnviado: 29 Mai 2013 14:31
por Amparo
ola amigos

bati a cabeça procurando alguma solução para meu caso e nao achei nada ou melhor, o que encontrei nao soube como implementar.

se alguem tiver alguma rotina e puder disponibilizar fico grato ou se quiser comercializar passeme o preço.

obrigado a todos.

Amparo

gerar arquivos em word usando harbour

MensagemEnviado: 29 Mai 2013 15:13
por Pablo César
Creio que o Itamar deu a entender que você pode fazer um texto (mesmo que RTF) onde você colocaria umas TAGs (strings fixas para referência) e mandar substituir essas tags pela strings que você deseja diferenciar.

Outra sugestão: eu diria que faça uma mala direta, onde você elabora o documento padrão com todas as formatações de tamanho de fontes e alinhamentos e outro arquivo de dados. O Word possibilita a mesclagem dos documentos. Tem muito material na internet falando disso. Esse seria o caminho mais certo.

Na HMG tem um exemplo acessando Word, mas ai vai complicar com a questão de formatação do texto e alinhamentos de campos... mas se quiser dar uma olhada em: C:\hmg.3.1.3\samples\OLE

gerar arquivos em word usando harbour

MensagemEnviado: 29 Mai 2013 23:59
por Itamar M. Lins Jr.
Ola!
O que eu quiz dizer é isso mesmo. MACRO.
No word, excel, etc, podemos criar uma macro de tudo que é feito. No word 2007 por exemplo clicar em exibição, lá no canto vai aparecer um botão macros.
EXECUTAR, Passo, Editar, Criar, Excluir, Biblioteca
Fiz essa como exemplo:

Sub Macro3()
'
' Macro3 Macro
'
'
    Selection.TypeText Text:="teste de macro"
    Selection.MoveLeft Unit:=wdCharacter, Count:=14, Extend:=wdExtend
    Selection.Font.Size = 22
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveLeft Unit:=wdCharacter, Count:=15
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeBackspace
    Selection.TypeText Text:="T"
End Sub


Eu não digitei nada disso ai em cima, o Word foi capturando tudo que eu estava fazendo e jogando nessa macro.

Saudações,
Itamar M. Lins Jr.

gerar arquivos em word usando harbour

MensagemEnviado: 30 Mai 2013 00:15
por Itamar M. Lins Jr.
Ola!
Achei esse exemplo bem complexo
https://groups.google.com/forum/?fromgroups#!searchin/comp.lang.xharbour/word/comp.lang.xharbour/vGtFfnH5Iz4/vysacFZhLuMJ

Hi all , after a lot of try and fail I got what is expected.
It´s VB problem related to RANGE and SELECTION.

The code that works :

#include 'winpar.ch' -> Define for Windows variables wd...

******************************************************************************
function table_form()
******************************************************************************
* Parameter vtbl -> order data array
para vtbl
LOCAL oWord,__text

TRY
   oWord := CreateObject( "Word.Application" )
CATCH
   Alert( "ERROR! Word not avalable. [" + Ole2TxtError()+ "]" )
   retu NIL
END

oWord:Visible := .T.

* Creating new Doc

odoc := oWord:Documents:Add()

* DOC Setup
-----------------------------------------------------------------
*odoc:PageSetup:Orientation(wdOrientLandscape)

* Don't know why but Word Function CentimetersToPoints cause LINKER
error ?!

*odoc:PageSetup:TopMargin := oWord:CentimetersToPoints(2.5)

odoc:PageSetup:TopMargin := 80   //  points
odoc:PageSetup:BottomMargin := 60
odoc:PageSetup:LeftMargin := 60
odoc:PageSetup:RightMargin := 40
*odoc:PageSetup:Gutter := 0
odoc:PageSetup:HeaderDistance := 40
odoc:PageSetup:FooterDistance := 40
*odoc:PageSetup:PageWidth := 21
*odoc:PageSetup:PageHeight := 29.7
*odoc:PageSetup:VerticalAlignment := wdAlignVerticalTop
* DOC Setup
-----------------------------------------------------------------

* Header
--------------------------------------------------------------------
odoc:ActiveWindow:ActivePane:View:SeekView(wdSeekCurrentPageHeader)
odoc:Select()
oWord:Selection:ParagraphFormat:Alignment := wdAlignParagraphCenter
oWord:Selection:Font:Name := "Arial"
oWord:Selection:Font:Bold := wdToggle
__text := hb_oemtoansi("Order Confirmation")
oWord:Selection:TypeText(__text)
* Header
--------------------------------------------------------------------

* Footer
--------------------------------------------------------------------
odoc:ActiveWindow:ActivePane:View:SeekView(wdSeekCurrentPageFooter)
odoc:Select()
oWord:Selection:ParagraphFormat:Alignment := wdAlignParagraphLeft
oWord:Selection:Font:Name := "Arial"
oWord:Selection:Font:Bold := wdToggle
oWord:Selection:Font:Size := 6
*                           Order number
*
__text := hb_oemtoansi("PD"+ pdv->codigo + ".DOC")
oWord:Selection:TypeText(__text)

* Blank Lines
oWord:Selection:TypeParagraph()
oWord:Selection:TypeParagraph()

oWord:Selection:ParagraphFormat:Alignment := wdAlignParagraphCenter
oWord:Selection:Font:Name := "Arial"
oWord:Selection:Font:Bold := wdToggle
oWord:Selection:Font:Size := 8
__auto := 'AUTOTEXT  "P gina X de Y" '
__auto := hb_oemtoansi(__auto)
oWord:Selection:Fields:Add(oWord:Selection:Range, -1, __auto, .T.)
* Footer
--------------------------------------------------------------------

* Return Active Doc
---------------------------------------------------------
odoc:ActiveWindow:ActivePane:View:SeekView(wdSeekMainDocument)

* First Paragraph , just to assign a range for table 1

opr1 := odoc:Paragraphs:Add()  //  paragrafo 1 para Tab1
rng1 := opr1:Range
otb1 := odoc:Tables:Add(rng1, 3, 2)

* Tab1 setup

otb1:Borders:OutsideLineStyle := wdLineStyleSingle
otb1:Borders:InsideLineStyle  := wdLineStyleNone
otb1:Select()
oWord:Selection:Cells:VerticalAlignment := wdCellAlignVerticalCenter

* Tab1 rows and cols setup
otb1:Rows:Item(1):Height := 18
otb1:Rows:Item(2):Height := 12
otb1:Rows:Item(3):Height := 12

otb1:Columns:Item(1):PreferredWidth := 350
otb1:Columns:Item(2):PreferredWidth := 100

* Fill the cells
__text := 'ACME INC.' + ' - '

__text += 'Pedido : ' + alltrim(pdv->codigo)
otb1:Cell(1, 1):Range:Font:Name := "Arial"
otb1:Cell(1, 1):Range:Font:Size := 10
otb1:Cell(1, 1):Range:Font:Bold := wdToggle
otb1:Cell(1, 1) := __text
otb1:Cell(1, 1):Range:Select()
oWord:Selection:MoveRight(wdCell,1)

__text := 'Data : ' + dtoc(pdv->dtinic)
otb1:Cell(1, 2):Range:Font:Name := "Arial"
otb1:Cell(1, 2):Range:Font:Size := 10
otb1:Cell(1, 2):Range:Font:Bold := wdToggle
otb1:Cell(1, 2) := __text
otb1:Cell(1, 2):Range:Select()
oWord:Selection:MoveLeft(wdCell,1)

otb1:Cell(1, 2):Range:Select()
oWord:Selection:MoveLeft(wdCell,1)

__text := alltrim(cad->end) + ' - ' + alltrim(cad->bai)
__text += ' , ' + alltrim(cad->cid) + ' , ' + cad->uf
__text += ' - CEP : ' + alltrim(cad->cep)
otb1:Cell(2, 1):Range:Font:Name := "Arial"
otb1:Cell(2, 1):Range:Font:Size := 9
otb1:Cell(2, 1) := __text
otb1:Cell(2, 1):Range:Select()
oWord:Selection:MoveRight(wdCell,1)

__text := 'Resp. LYC : Caio'
otb1:Cell(2, 2):Range:Font:Name := "Arial"
otb1:Cell(2, 2):Range:Font:Size := 9
otb1:Cell(2, 2):Range:Font:Bold := wdToggle
otb1:Cell(2, 2) := __text
otb1:Cell(2, 2):Range:Select()
oWord:Selection:MoveLeft(wdCell,1)

__text := 'Tel. / Fax : ' + alltrim(cad->fone1) + ' / ' + alltrim(cad-
>fone2)
otb1:Cell(3, 1):Range:Font:Name := "Arial"
otb1:Cell(3, 1):Range:Font:Size := 9
otb1:Cell(3, 1) := __text
otb1:Cell(2, 1):Range:Select()
oWord:Selection:MoveRight(wdCell,1)

otb1:Cell(3, 2):Range:Select()
oWord:Selection:Collapse(wdCollapseEnd)
* Closing Tab1 range , selection

* Blank Line

opr2 := odoc:Paragraphs:Add()  //  paragrafo 2
rng2 := opr2:Range
rng2:Select()
oWord:Selection:Collapse(wdCollapseEnd)

* Client Data

wlixo:=cli->(at_seek(pdv->codimp,.f.))
opr3 := odoc:Paragraphs:Add()  //  paragrafo 3 , Tab2
rng3 := opr3:Range

otb2 := odoc:Tables:Add(rng3, 3, 2)
otb2:Borders:OutsideLineStyle := wdLineStyleSingle
otb2:Borders:InsideLineStyle := wdLineStyleNone

otb2:Select()
oWord:Selection:Cells:VerticalAlignment := wdCellAlignVerticalCenter

otb2:Rows:Item(1):Height := 18
otb2:Rows:Item(2):Height := 12
otb2:Rows:Item(3):Height := 12

otb2:Columns:Item(1):PreferredWidth := 50
otb2:Columns:Item(2):PreferredWidth := 400

__text := 'Cliente : '

otb2:Cell(1, 1):Range:Font:Name := "Arial"
otb2:Cell(1, 1):Range:Font:Size := 10
otb2:Cell(1, 1) := __text
otb2:Cell(1, 1):Range:Select()
oWord:Selection:MoveRight(wdCell,1)

__text := alltrim(cli->nome)
otb2:Cell(1, 2):Range:Font:Name := "Arial"
otb2:Cell(1, 2):Range:Font:Size := 10
otb2:Cell(1, 2) := __text
otb2:Cell(1, 2):Range:Select()
oWord:Selection:MoveLeft(wdCell,1)

__text := ''

otb2:Cell(2, 1):Range:Font:Name := "Arial"
otb2:Cell(2, 1):Range:Font:Size := 10

otb2:Cell(2, 1) := __text
otb2:Cell(2, 1):Range:Select()
oWord:Selection:MoveRight(wdCell,1)

__text := alltrim(cli->end) + ' - ' + alltrim(cli->bai)

__text += ' , ' + alltrim(cli->cid) + ' , ' + cli->uf
__text += ' - CEP : ' + alltrim(cli->cep)
otb2:Cell(2, 2):Range:Font:Name := "Arial"
otb2:Cell(2, 2):Range:Font:Size := 8
otb2:Cell(2, 2) := __text
otb2:Cell(2, 2):Range:Select()
oWord:Selection:MoveLeft(wdCell,1)

__text := 'Contato : '

otb2:Cell(3, 1):Range:Font:Name := "Arial"
otb2:Cell(3, 1):Range:Font:Size := 8
otb2:Cell(3, 1) := __text
otb2:Cell(3, 1):Range:Select()
oWord:Selection:MoveRight(wdCell,1)

__text := alltrim(cli->contato)
otb2:Cell(3, 2):Range:Font:Name := "Arial"
otb2:Cell(3, 2):Range:Font:Size := 8
otb2:Cell(3, 2) := __text
otb2:Cell(3, 2):Range:Select()
oWord:Selection:Collapse(wdCollapseEnd)

* Blank Line

opr4 := odoc:Paragraphs:Add()  //  paragrafo 4
rng4 := opr4:Range
rng4:Select()
oWord:Selection:Collapse(wdCollapseEnd)

* Order Table Instruction and Button

opr5 := odoc:Paragraphs:Add()  //  paragrafo 5
rng5 := opr5:Range

otb3 := odoc:Tables:Add(rng5, 1, 2)
otb3:Select()
oWord:Selection:Cells:VerticalAlignment := wdCellAlignVerticalCenter

otb3:Borders:OutsideLineStyle := wdLineStyleNone
otb3:Borders:InsideLineStyle := wdLineStyleNone

otb3:Rows:Item(1):Height := 16

otb3:Columns:Item(1):PreferredWidth := 350
otb3:Columns:Item(2):PreferredWidth := 100

__mens := 'Eventuais altera‡äes de quantidades podem ser feitas na
Col. "Qtde. Alt.".'
__mens += chr(13) + chr(10)
__mens += 'Em caso de altera‡äes, para atualizar Tab. Pedido basta
clicar botÆo "Atualizar Pedido".'
__mens := hb_oemtoansi(__mens)
otb3:Cell(1, 1):Range:Font:Name := "Arial"
otb3:Cell(1, 1):Range:Font:Size := 8
otb3:Cell(1, 1):Range:Font:Bold := wdToggle
otb3:Cell(1, 1) := __mens
otb3:Cell(1, 1):Range:Select()
oWord:Selection:MoveLeft(wdCell,1)

* Command Button Def.
rngb := otb3:Cell(1, 2):Range
rngb:Select()
oWord:Selection:ParagraphFormat:Alignment := wdAlignParagraphRight

obot := rngb:InLineshapes:AddOLEControl("Forms.CommandButton.1")

ocmd := obot:OLEFormat:Object
ocmd:Font:Name := "Verdana"
ocmd:Font:Size := 9
ocmd:Caption := " Atualizar Pedido "
ocmd:ForeColor := "&H808000"
ocmd:BackColor := "&HC0FFFF"
ocmd:AutoSize := .t.

* Command Button "on click" Sub

scode := 'Private Sub CommandButton1_Click()' + chr(13) + chr(10)
scode += 'Word.ActiveDocument.UnProtect("hu")' + chr(13) + chr(10)
scode += 'Word.ActiveDocument.Tables.Item(4).Columns.Item(7).Select' +

chr(13) + chr(10)
scode += 'Selection.Fields.Update' + chr(13) + chr(10)
scode += 'Selection.Collapse(wdCollapseEnd)' + chr(13) + chr(10)
scode += 'Word.ActiveDocument.Protect Type:=
wdAllowOnlyFormFields,NoReset:=True,Password:="hu"' + chr(13) + chr

(10)
scode += 'End Sub'

scode := hb_oemtoansi(scode)
odoc:VBProject:VBComponents:Item(1):CodeModule:AddFromString(scode)
oWord:Selection:Collapse(wdCollapseEnd)

* Linha em branco
opr6 := odoc:Paragraphs:Add()  //  paragrafo 6
rng6 := opr6:Range
rng6:Select()
oWord:Selection:Collapse(wdCollapseEnd)

* Order Table Header array
vcab := {}
aadd(vcab,'Codigo Mercado')  //  esquerda
aadd(vcab,'Marca')           //  centro
aadd(vcab,'FOB US$')         //  direita
aadd(vcab,'Qtde.')           //  direita
aadd(vcab,'Total US$')       //  direita
aadd(vcab,'Qtde. Alt.')      //  direita
aadd(vcab,'Total Alt. US$')  //  direita

* Order Table Def.
oprA := odoc:Paragraphs:Add()  //  paragrafo 10 , Tab3
rngA := oprA:Range

* Definicao linhas e colunas tabela
nrow := len(vtbl)
ncol := len(vcab)
*                            1 linha cab.
*
otb4 := odoc:Tables:Add(rngA,nrow+1,ncol)
otb4:Borders:OutsideLineStyle := wdLineStyleSingle
otb4:Borders:InsideLineStyle := wdLineStyleSingle
otb4:Select()
oWord:Selection:Cells:VerticalAlignment := wdCellAlignVerticalCenter

* Order Table Header

for ic = 1 to ncol
    __text := vcab[ic]
    otb4:Cell(1,ic):Range:Font:Name := "Arial"
    otb4:Cell(1,ic):Range:Font:Size := 9
    otb4:Cell(1,ic):Range:Font:Bold := wdToggle
    otb4:Cell(1,ic) := __text
    otb4:Columns:Item(ic):Select()
    if     ic = 1
           otb4:Columns:Item(ic):PreferredWidth := 100
           oWord:Selection:ParagraphFormat:Alignment :=
wdAlignParagraphLeft
    elseif ic = 2
           otb4:Columns:Item(ic):PreferredWidth := 50
           oWord:Selection:ParagraphFormat:Alignment :=
wdAlignParagraphCenter
    else
           otb4:Columns:Item(ic):PreferredWidth := 70
           oWord:Selection:ParagraphFormat:Alignment :=
wdAlignParagraphRight
    endi
    oWord:Selection:Collapse(wdCollapseEnd)
next

* Order Table

for i = 1 to nrow
    for j = 1 to ncol
        otb4:Cell(i+1,j):Range:Font:Name := "Courier New"
        otb4:Cell(i+1,j):Range:Font:Size := 8

        if j <= ncol-2
           __text := vtbl[i,j]
           otb4:Cell(i+1,j) := __text
        elseif j = ncol-1
           crng := otb4:Cell(i+1,j):Range

           odoc:FormFields:Add(crng,wdFieldFormTextInput)
        else
           formula := "="
           formula += "C" + alltrim(tran(i+1,'999'))
           formula += "*"
           formula += "F" + alltrim(tran(i+1,'999'))
           otb4:Cell(i+1,j):Formula(formula,"0,00")
        endi
    next
next
*
otb4:Cell(nrow+1,ncol):Range:Select()
oWord:Selection:Collapse(wdCollapseEnd)

oWord:ActiveDocument:Protect(wdAllowOnlyFormFields,.t.,"hu")
inkey(0)

odoc:SaveAS("C:\test\test.doc")

odoc:Close()
oWord:Quit()

return NIL


Saudações,
Itamar M. Lins Jr.

gerar arquivos em word usando harbour

MensagemEnviado: 30 Mai 2013 00:22
por Itamar M. Lins Jr.
Colocar imagem.
I am attempting to insert an image (picture file) into a table cell in a
word document programatically.

The code I have thus far is :
**************************
local oWord, oDoc, oRng, oTbl, oCel
if ( oWord := createobject("Word.Application") ) != nil
   oWord:Visible := .f.
   oDoc := oWord:Documents:Add()
   oRng := oDoc:Range(0,1)
   oTbl := oDoc:Tables:Add(oRng,3,3)
   oCel := oTbl:Cell(2,2)

*    need to Insert image into oCel here

   oDoc:Close()
endif
Thanks for any suggestions

Gene
***************************

Try

oDoc:InlineShapes:AddPicture( "your image with full path", .F., .T.,
oCel:Range )

Thank you Enrico! Worked great!

Regards,
Gene



Saudações,
Itamar M. Lins Jr.

gerar arquivos em word usando harbour

MensagemEnviado: 30 Mai 2013 00:30
por Itamar M. Lins Jr.
Eu tentaria primeiro usar HTML, porém cada caso é um caso.

Saudações,
Itamar M. Lins Jr.

gerar arquivos em word usando harbour

MensagemEnviado: 30 Mai 2013 21:18
por Hasse
Boa noite colegas.

Eu faço assim:
1)-Gero um documento padrão no MS-Word e gravo no formato RTF;
2)-Neste documento crio macro-variáveis, algo como "#c_Nome#", "#c_Endereco#", etc.;
3)-Estas macro-variáveis serão substituídas pelo aplicativo;
3)-A aplicativo lê este arquivo padrão, faz a substituição das macro-variáveis, grava o arquivo como outro nome;
4)-Dispara o Word e carrega o arquivo;
5)-O usuário pede ler, alterar, imprimir o arquivo segundo a sua necessidade.

Se houver interesse posso avançar no assunto.

gerar arquivos em word usando harbour

MensagemEnviado: 31 Mai 2013 08:17
por Pablo César
Hasse escreveu:Se houver interesse posso avançar no assunto.
Sim claro, é muito bom ver exemplos.

Foi a primeira sugestão que dei quando explicava o que o Itamar tinha dito. Mas deve funcionar muito bem, não é ? E isso até dá pra fazer em puro Clipper.

gerar arquivos em word usando harbour

MensagemEnviado: 31 Mai 2013 14:19
por Hasse
Boa tarde Pablo.

O teu desejo é uma ordem para mim (rsrsrsrsrs)....
Acima de tudo é um prazer e uma honra poder contribuir.

Abaixo o PRG, muito simples...

*
*
*==================================================================================================
FUNCTION Main()                                 //  PRT_CBSUL()
*
SET DATE FORMAT TO "DD/MM/YYYY"
SET EPOCH TO 1901
*
REQUEST HB_CODEPAGE_PT850
HB_SetCodePage( "PT850" )
*
REQUEST DBFCDX
RddSetDefault("DBFCDX")
*
c_Arq1 := "_Contrato_CBSUL_01.rtf"                                        // c_ServPath + "\_Contrato_CBSUL_01.rtf"
c_Arq2 := "_Contr_CBSUL.rtf"                                              // c_LocalPath + "\_Contr_CBSUL.rtf"
c_Data := DtoC( Date() )
*
IF File( c_Arq1 )
   FileCopy( c_Arq1, c_Arq2 )
   SetFAttr( c_Arq2, 0 )
   c_Contrato := MemoRead( "_Contrato_CBSUL_01.rtf" )
ELSE
   Alert( 'O arquivo "_Contr_CBSUL.rtf" est  faltando no servidor. ;;Verifique !!!;;' +;
          'ImpressÆo cancelada.')
   RETURN( NIL )
ENDIF
*
c_NomDev  := "Edson Machado da Silva Borges Medina"               // ALLTRIM( CADASTRO->NOME )
c_CpfCnpj := "111.222.333/0001-44"                                // ALLTRIM( CADASTRO->CGC_CPF )
c_Ident   := "5.666.777-8"                                        // ALLTRIM( CADASTRO->IDENT )
*
IF EMPTY( c_CpfCnpj )
   ALERT( 'Falta o CPF/CNPJ do cliente ;== ' + c_NomDev + ' ==;Providenciar;;EmissÆo do Contrato Cancelado.' )
   RETURN( .F. )
ENDIF
*
IF EMPTY( c_Ident ) .AND. "CPF-" $ c_CpfCnpj
   ALERT( 'Falta a IDENTIDADE do cliente ;== ' + c_NomDev + ' ==;  Providenciar;;EmissÆo do Contrato Cancelado.' )
   RETURN( .F. )
ENDIF
*
c_NomDev   := HB_OemToAnsi( c_NomDev )
c_CpfCnpj  := STRTRAN( c_CpfCnpj, "CPF-", "" )
*
c_Contrato := STRTRAN( c_Contrato, "#@NomDev@#",    c_NomDev )
c_Contrato := STRTRAN( c_Contrato, "#@NumCPF@#",    c_CpfCnpj )
c_Contrato := STRTRAN( c_Contrato, "#@NumIdent@#",  c_Ident )
c_Contrato := STRTRAN( c_Contrato, "#@DtContr@#",   c_Data )
*
MemoWrit( "_Contr_CBSUL.rtf", c_Contrato )
*
cRoda2 := 'START "C:\Arquivos de programas\Microsoft Office\OFFICE11\winword.exe" _Contr_CBSUL.rtf'
*
RUN( cRoda2 )
*
RETURN( NIL )

Adaptei o PRG acima para ser usado em qualquer pasta que seja gravado.

Para facilitar substituí a leitura do arquivo DBF por variáveis fixas, para ser testado sem qualquer modificação. Ali podem ser implantadas tantas variáveis quantas forem necessárias. Tenho rotinas onde são substituídas mais de 50 variáveis no mesmo RTF. Tenho um onde substituo um trecho do próprio texto, o que afinal é a mesma coisa.

Eu tenho o arquivo RTF em pasta à parte, por isso uso variáveis para definir os caminhos. Aqui cada qual pode manusear da forma como lhe aprouver.

Baixar o arquivo RTF que está no Anexo e gravar na mesma pasta.

Observar que o arquivo "_Contrato_CBSUL_01.rtf" é lido e arquivado na memória na variável c_Contrato, e após devidamente trabalhado, é gravado como "_Contr_CBSUL.rtf" que, por sua vez, é encaminhado para o MS-Word para ser lido.

O arquivo "_Contrato_CBSUL_01.rtf", que é o original e não deve ser alterado. Recomendo que seja travado com propriedade "só leitura" para evitar que seja apagado ou sobre-gravado por descuido.

Compilar, sem qualquer LIB adicional.

Rodar...... e, voilá... O Contrato devidamente preenchido está aberto no MS-Word em questão de poucos segundos.

Vantagens: Temos SEMPRE o texto formatado e justificado, independente do número de variáveis substituídas e do tamanho dessas variáveis. O MS-Word trata deste assunto sem que se precise preocupar com o assunto.
Como o colega Pablo mencionou, pode ser rodado em Clipper puro.

gerar arquivos em word usando harbour

MensagemEnviado: 31 Mai 2013 14:34
por Pablo César
Fantastico !

Obrigado Hasse por compartilhar conosco !

:)Pos

gerar arquivos em word usando harbour

MensagemEnviado: 31 Mai 2013 19:47
por Hasse
Partindo de um Mestre considero esta avaliação como um grande elogio.

Obrigado.

gerar arquivos em word usando harbour

MensagemEnviado: 04 Jun 2013 16:54
por Amparo
ola amigos

Hasse, eu nao sei nem o que falar...

voce nao pode imaginar o quanto estou feliz em conseguir emitir um contrato em meu sistema feito em puro Harbour no formato do word, sao pessoa como voce o Pablo o Itamar o Rochinha e outros que nao me lembro o nome agora, mas que a cada dia merecem aplausos e mais aplausos.

muito mais muito obrigado mesmo, espero um dia por estar a altura de voces e poder ajudar outros que tambem necessitam.

abraços
Amparo.

gerar arquivos em word usando harbour

MensagemEnviado: 05 Jun 2013 19:12
por Hasse
Fico especial e duplamente satisfeito com esta tua vibrante satisfação e alegria.

Aqui estaremos sempre às ordens para nos ajudarmos mutuamente. Fui muito auxiliado no meu início com o xHarbour, e agora procuro retribuir da melhor forma possível.

E ainda preciso de auxílio, agora que estou dando os primeiros passos na MiniGUI. Ou seja, sempre aprendendo...

gerar arquivos em word usando harbour

MensagemEnviado: 02 Jul 2013 11:37
por Amparo
ola pessoal

tudo bem com vcs...

preciso novamente da ajuda dos colenas, esta aparecendo um erro ao abrir e imprimir um arquivo RTF no word

abaixo a linha completa da procedure
Procedure IMPRIME_WORD( CARQ )
Local oWord

oWord:=TOleAuto():New( "Word.Application" )
oWord:Documents:Open( CARQ )
oWord:WindowState := 1
oWord:Visible := .t.
oWord:PrintOut()   //PARA IMPRIMIR DIRETO

Return


e aparece o seguinte erro:
Erro TOleAuto/-1 0x80080005: TOLEAUTO:NEW
Erro DOS nÆo dispon¡vel

se eu der dois cliques no arquivo RTF ele abre o WORD com todos os dados corretamente, ja tentei alterar a linha do prg colocando assim:
oWord:=TOleAuto():New( "WinWord.Application" )

ai da outro erro:
Erro TOleAuto/-1 CO_E_CLASSSTRING: TOLEAUTO:NEW
Erro DOS nÆo dispon¡vel

alguem tem ideia do que pode ser?

gerar arquivos em word usando harbour

MensagemEnviado: 02 Jul 2013 16:27
por rochinha
Amiguinhos,

Vale a pena relembrar [url=pctoledo.com.br/forum/viewtopic.php?f=43&t=7138&p=64446&hilit=olemerge#p64446]MERGE - Colagem de dados via Command Line[/url].

No caso do acesso via OLE cabe-se usar CreateObject( "Word.Application" ) ou Win_CreateObject( "Word.Application" ) no lugar de TOLEAuto():New( "Word.Application" ).

Quando sabemos qual a versão de nossos Offices podemos reforçar a forma de chamada assim:

( "Word.Application.8" ) // Para versão 8
( "Word.Application.10" ) // Para versão 10
( "Word.Application.11" ) // Para versão 11

etc.

gerar arquivos em word usando harbour

MensagemEnviado: 01 Nov 2019 12:53
por cjp
Pessoal, estou precisando criar um arquivo do Word por meio de minha aplicação em Harbour. Pesquisando no fórum, achei este post. Testei os exemplos acima, mas não consegui nem compilá-los.
Agradeceria se alguém poderia dar dicas para um iniciante. É um arquivo simples, só com texto, mas preciso de mínimas formatações do Word, nada complexo.
Qualquer ajuda é bem vinda.

gerar arquivos em word usando harbour

MensagemEnviado: 01 Nov 2019 13:27
por sygecom
Inacio,
Post os erros que está dando ao compilar

gerar arquivos em word usando harbour

MensagemEnviado: 02 Nov 2019 10:30
por cjp
Primeiro está dando erro nesta linha:

#include 'winpar.ch' -> Define for Windows variables wd...


Imagino que esteja faltando alguma lib.

Daí eu comentei essa linha, só que daí dá vários erros de compilação, especialmente nas linhas que têm:

otb2:Cell(1, 1) := __text


Agradeço toda ajuda.

gerar arquivos em word usando harbour

MensagemEnviado: 02 Nov 2019 19:07
por JoséQuintas
cjp escreveu:Imagino que esteja faltando alguma lib.


#include "winpar.ch" 


Isso é pra incluir dentro do PRG o arquivo winpar.ch
Se está dando erro, é porque não existe o arquivo winpar.ch
Se isso vém de uma LIB ou não, ou se vai precisar de mais coisas, aí já é outra história.

Ou se está do jeito que escreveu.... talvez esteja escrito errado.

gerar arquivos em word usando harbour

MensagemEnviado: 03 Nov 2019 01:11
por cjp
De fato, o arquivo winpar.ch não existe no meu computador.
Se ele é de alguma lib, qual seria? E como a obtenho?
Se estiver escrito errado, não fui eu que escrevi, só copiei o que está neste post.

gerar arquivos em word usando harbour

MensagemEnviado: 03 Nov 2019 09:56
por JoséQuintas
#include 'winpar.ch' -> Define for Windows variables wd...


É que do jeito acima, nem sei se funciona

Se não tiver outro jeito, na Microsoft tem todos as constantes/#defines
Mas é uma lista gigantesca, milhares.
Pode compilar usando -w3 -es2 e digitar somente o que o fonte precisar.

Seria interessante, talvez, alterar pra "office.ch" e deixar tudo em maiúsculas como é o padrão do Harbour/Clipper.

https://docs.microsoft.com/pt-br/office/vba/api/word.wdlinestyle

por exemplo, alguns dessa página:

#define WDLINESTYLEDASHDOT 0,5
#define WDLINESTYLEDASHDOTDOT 6


Se não encontrar o tal winpar.ch, o jeito vai ser digitar.

Ou verifique nas LIBs GUI se tem algum exemplo, e se tem arquivo equivalente.
Ou algum kit SDK da Microsoft que tenha isso.

gerar arquivos em word usando harbour

MensagemEnviado: 03 Nov 2019 23:45
por sygecom
cjp escreveu:Primeiro está dando erro nesta linha:

#include 'winpar.ch' -> Define for Windows variables wd...


Imagino que esteja faltando alguma lib.

Daí eu comentei essa linha, só que daí dá vários erros de compilação, especialmente nas linhas que têm:

otb2:Cell(1, 1) := __text


Agradeço toda ajuda.


Olhei todos os post aqui não tem nenhum com: #include 'winpar.ch', de onde você tirou isso ? por que colocou no seu código ? Post o exemplo completo que está tentando compilar.

gerar arquivos em word usando harbour

MensagemEnviado: 04 Nov 2019 01:20
por cjp
Segue meu código completo, exatamente como retirei do post acima:

function main

*Hi all , after a lot of try and fail I got what is expected.
*It´s VB problem related to RANGE and SELECTION.

*The code that works :

*#include 'winpar.ch' -> Define for Windows variables wd...

table_form()

******************************************************************************
function table_form()
******************************************************************************
* Parameter vtbl -> order data array para vtbl
LOCAL oWord,__text

*TRY
   oWord := CreateObject( "Word.Application" )
*CATCH
*   Alert( "ERROR! Word not avalable. [" + Ole2TxtError()+ "]" )
*   retu NIL
*END

oWord:Visible := .T.

* Creating new Doc

odoc := oWord:Documents:Add()

* DOC Setup
*-----------------------------------------------------------------
*odoc:PageSetup:Orientation(wdOrientLandscape)

* Don't know why but Word Function CentimetersToPoints cause LINKER error ?!

*odoc:PageSetup:TopMargin := oWord:CentimetersToPoints(2.5)

odoc:PageSetup:TopMargin := 80   //  points
odoc:PageSetup:BottomMargin := 60
odoc:PageSetup:LeftMargin := 60
odoc:PageSetup:RightMargin := 40
*odoc:PageSetup:Gutter := 0
odoc:PageSetup:HeaderDistance := 40
odoc:PageSetup:FooterDistance := 40
*odoc:PageSetup:PageWidth := 21
*odoc:PageSetup:PageHeight := 29.7
*odoc:PageSetup:VerticalAlignment := wdAlignVerticalTop
* DOC Setup
*-----------------------------------------------------------------

* Header
*--------------------------------------------------------------------
odoc:ActiveWindow:ActivePane:View:SeekView(wdSeekCurrentPageHeader)
odoc:Select()
oWord:Selection:ParagraphFormat:Alignment := wdAlignParagraphCenter
oWord:Selection:Font:Name := "Arial"
oWord:Selection:Font:Bold := wdToggle
__text := hb_oemtoansi("Order Confirmation")
oWord:Selection:TypeText(__text)
* Header
*--------------------------------------------------------------------

* Footer
*--------------------------------------------------------------------
odoc:ActiveWindow:ActivePane:View:SeekView(wdSeekCurrentPageFooter)
odoc:Select()
oWord:Selection:ParagraphFormat:Alignment := wdAlignParagraphLeft
oWord:Selection:Font:Name := "Arial"
oWord:Selection:Font:Bold := wdToggle
oWord:Selection:Font:Size := 6
*                           Order number
*
__text := hb_oemtoansi("PD"+ pdv->codigo + ".DOC")
oWord:Selection:TypeText(__text)

* Blank Lines
oWord:Selection:TypeParagraph()
oWord:Selection:TypeParagraph()

oWord:Selection:ParagraphFormat:Alignment := wdAlignParagraphCenter
oWord:Selection:Font:Name := "Arial"
oWord:Selection:Font:Bold := wdToggle
oWord:Selection:Font:Size := 8
__auto := 'AUTOTEXT  "P gina X de Y" '
__auto := hb_oemtoansi(__auto)
oWord:Selection:Fields:Add(oWord:Selection:Range, -1, __auto, .T.)
* Footer
*--------------------------------------------------------------------

* Return Active Doc
*---------------------------------------------------------
odoc:ActiveWindow:ActivePane:View:SeekView(wdSeekMainDocument)

* First Paragraph , just to assign a range for table 1

opr1 := odoc:Paragraphs:Add()  //  paragrafo 1 para Tab1
rng1 := opr1:Range
otb1 := odoc:Tables:Add(rng1, 3, 2)

* Tab1 setup

otb1:Borders:OutsideLineStyle := wdLineStyleSingle
otb1:Borders:InsideLineStyle  := wdLineStyleNone
otb1:Select()
oWord:Selection:Cells:VerticalAlignment := wdCellAlignVerticalCenter

* Tab1 rows and cols setup
otb1:Rows:Item(1):Height := 18
otb1:Rows:Item(2):Height := 12
otb1:Rows:Item(3):Height := 12

otb1:Columns:Item(1):PreferredWidth := 350
otb1:Columns:Item(2):PreferredWidth := 100

* Fill the cells
__text := 'ACME INC.' + ' - '

__text += 'Pedido : ' + alltrim(pdv->codigo)
otb1:Cell(1, 1):Range:Font:Name := "Arial"
otb1:Cell(1, 1):Range:Font:Size := 10
otb1:Cell(1, 1):Range:Font:Bold := wdToggle
*otb1:Cell(1, 1) := __text
otb1:Cell(1, 1):Range:Select()
oWord:Selection:MoveRight(wdCell,1)

__text := 'Data : ' + dtoc(pdv->dtinic)
otb1:Cell(1, 2):Range:Font:Name := "Arial"
otb1:Cell(1, 2):Range:Font:Size := 10
otb1:Cell(1, 2):Range:Font:Bold := wdToggle
*otb1:Cell(1, 2) := __text
otb1:Cell(1, 2):Range:Select()
oWord:Selection:MoveLeft(wdCell,1)

otb1:Cell(1, 2):Range:Select()
oWord:Selection:MoveLeft(wdCell,1)

__text := alltrim(cad->end) + ' - ' + alltrim(cad->bai)
__text += ' , ' + alltrim(cad->cid) + ' , ' + cad->uf
__text += ' - CEP : ' + alltrim(cad->cep)
otb1:Cell(2, 1):Range:Font:Name := "Arial"
otb1:Cell(2, 1):Range:Font:Size := 9
*otb1:Cell(2, 1) := __text
otb1:Cell(2, 1):Range:Select()
oWord:Selection:MoveRight(wdCell,1)

__text := 'Resp. LYC : Caio'
otb1:Cell(2, 2):Range:Font:Name := "Arial"
otb1:Cell(2, 2):Range:Font:Size := 9
otb1:Cell(2, 2):Range:Font:Bold := wdToggle
*otb1:Cell(2, 2) := __text
otb1:Cell(2, 2):Range:Select()
oWord:Selection:MoveLeft(wdCell,1)

__text := 'Tel. / Fax : ' + alltrim(cad->fone1) + ' / ' + alltrim(cad->fone2)
otb1:Cell(3, 1):Range:Font:Name := "Arial"
otb1:Cell(3, 1):Range:Font:Size := 9
*otb1:Cell(3, 1) := __text
otb1:Cell(2, 1):Range:Select()
oWord:Selection:MoveRight(wdCell,1)

otb1:Cell(3, 2):Range:Select()
oWord:Selection:Collapse(wdCollapseEnd)
* Closing Tab1 range , selection

* Blank Line

opr2 := odoc:Paragraphs:Add()  //  paragrafo 2
rng2 := opr2:Range
rng2:Select()
oWord:Selection:Collapse(wdCollapseEnd)

* Client Data

wlixo:=cli->(at_seek(pdv->codimp,.f.))
opr3 := odoc:Paragraphs:Add()  //  paragrafo 3 , Tab2
rng3 := opr3:Range

otb2 := odoc:Tables:Add(rng3, 3, 2)
otb2:Borders:OutsideLineStyle := wdLineStyleSingle
otb2:Borders:InsideLineStyle := wdLineStyleNone

otb2:Select()
oWord:Selection:Cells:VerticalAlignment := wdCellAlignVerticalCenter

otb2:Rows:Item(1):Height := 18
otb2:Rows:Item(2):Height := 12
otb2:Rows:Item(3):Height := 12

otb2:Columns:Item(1):PreferredWidth := 50
otb2:Columns:Item(2):PreferredWidth := 400

__text := 'Cliente : '

otb2:Cell(1, 1):Range:Font:Name := "Arial"
otb2:Cell(1, 1):Range:Font:Size := 10
*otb2:Cell(1, 1) := __text
otb2:Cell(1, 1):Range:Select()
oWord:Selection:MoveRight(wdCell,1)

__text := alltrim(cli->nome)
otb2:Cell(1, 2):Range:Font:Name := "Arial"
otb2:Cell(1, 2):Range:Font:Size := 10
*otb2:Cell(1, 2) := __text
otb2:Cell(1, 2):Range:Select()
oWord:Selection:MoveLeft(wdCell,1)

__text := ''

otb2:Cell(2, 1):Range:Font:Name := "Arial"
otb2:Cell(2, 1):Range:Font:Size := 10

*otb2:Cell(2, 1) := __text
otb2:Cell(2, 1):Range:Select()
oWord:Selection:MoveRight(wdCell,1)

__text := alltrim(cli->end) + ' - ' + alltrim(cli->bai)

__text += ' , ' + alltrim(cli->cid) + ' , ' + cli->uf
__text += ' - CEP : ' + alltrim(cli->cep)
otb2:Cell(2, 2):Range:Font:Name := "Arial"
otb2:Cell(2, 2):Range:Font:Size := 8
*otb2:Cell(2, 2) := __text
otb2:Cell(2, 2):Range:Select()
oWord:Selection:MoveLeft(wdCell,1)

__text := 'Contato : '

otb2:Cell(3, 1):Range:Font:Name := "Arial"
otb2:Cell(3, 1):Range:Font:Size := 8
otb2:Cell(3, 1) := __text
otb2:Cell(3, 1):Range:Select()
oWord:Selection:MoveRight(wdCell,1)

__text := alltrim(cli->contato)
otb2:Cell(3, 2):Range:Font:Name := "Arial"
otb2:Cell(3, 2):Range:Font:Size := 8
otb2:Cell(3, 2) := __text
otb2:Cell(3, 2):Range:Select()
oWord:Selection:Collapse(wdCollapseEnd)

* Blank Line

opr4 := odoc:Paragraphs:Add()  //  paragrafo 4
rng4 := opr4:Range
rng4:Select()
oWord:Selection:Collapse(wdCollapseEnd)

* Order Table Instruction and Button

opr5 := odoc:Paragraphs:Add()  //  paragrafo 5
rng5 := opr5:Range

otb3 := odoc:Tables:Add(rng5, 1, 2)
otb3:Select()
oWord:Selection:Cells:VerticalAlignment := wdCellAlignVerticalCenter

otb3:Borders:OutsideLineStyle := wdLineStyleNone
otb3:Borders:InsideLineStyle := wdLineStyleNone

otb3:Rows:Item(1):Height := 16

otb3:Columns:Item(1):PreferredWidth := 350
otb3:Columns:Item(2):PreferredWidth := 100

__mens := 'Eventuais altera‡äes de quantidades podem ser feitas na Col. "Qtde. Alt.".'
__mens += chr(13) + chr(10)
__mens += 'Em caso de altera‡äes, para atualizar Tab. Pedido basta clicar botÆo "Atualizar Pedido".'
__mens := hb_oemtoansi(__mens)
otb3:Cell(1, 1):Range:Font:Name := "Arial"
otb3:Cell(1, 1):Range:Font:Size := 8
otb3:Cell(1, 1):Range:Font:Bold := wdToggle
otb3:Cell(1, 1) := __mens
otb3:Cell(1, 1):Range:Select()
oWord:Selection:MoveLeft(wdCell,1)

* Command Button Def.
rngb := otb3:Cell(1, 2):Range
rngb:Select()
oWord:Selection:ParagraphFormat:Alignment := wdAlignParagraphRight

obot := rngb:InLineshapes:AddOLEControl("Forms.CommandButton.1")

ocmd := obot:OLEFormat:Object
ocmd:Font:Name := "Verdana"
ocmd:Font:Size := 9
ocmd:Caption := " Atualizar Pedido "
ocmd:ForeColor := "&H808000"
ocmd:BackColor := "&HC0FFFF"
ocmd:AutoSize := .t.

* Command Button "on click" Sub

scode := 'Private Sub CommandButton1_Click()' + chr(13) + chr(10)
scode += 'Word.ActiveDocument.UnProtect("hu")' + chr(13) + chr(10)
scode += 'Word.ActiveDocument.Tables.Item(4).Columns.Item(7).Select' +

chr(13) + chr(10)
scode += 'Selection.Fields.Update' + chr(13) + chr(10)
scode += 'Selection.Collapse(wdCollapseEnd)' + chr(13) + chr(10)
scode += 'Word.ActiveDocument.Protect Type:=
wdAllowOnlyFormFields,NoReset:=True,Password:="hu"' + chr(13) + chr(10)
scode += 'End Sub'

scode := hb_oemtoansi(scode)
odoc:VBProject:VBComponents:Item(1):CodeModule:AddFromString(scode)
oWord:Selection:Collapse(wdCollapseEnd)

* Linha em branco
opr6 := odoc:Paragraphs:Add()  //  paragrafo 6
rng6 := opr6:Range
rng6:Select()
oWord:Selection:Collapse(wdCollapseEnd)

* Order Table Header array
vcab := {}
aadd(vcab,'Codigo Mercado')  //  esquerda
aadd(vcab,'Marca')           //  centro
aadd(vcab,'FOB US$')         //  direita
aadd(vcab,'Qtde.')           //  direita
aadd(vcab,'Total US$')       //  direita
aadd(vcab,'Qtde. Alt.')      //  direita
aadd(vcab,'Total Alt. US$')  //  direita

* Order Table Def.
oprA := odoc:Paragraphs:Add()  //  paragrafo 10 , Tab3
rngA := oprA:Range

* Definicao linhas e colunas tabela
nrow := len(vtbl)
ncol := len(vcab)
*                            1 linha cab.
*
otb4 := odoc:Tables:Add(rngA,nrow+1,ncol)
otb4:Borders:OutsideLineStyle := wdLineStyleSingle
otb4:Borders:InsideLineStyle := wdLineStyleSingle
otb4:Select()
oWord:Selection:Cells:VerticalAlignment := wdCellAlignVerticalCenter

* Order Table Header

for ic = 1 to ncol
    __text := vcab[ic]
    otb4:Cell(1,ic):Range:Font:Name := "Arial"
    otb4:Cell(1,ic):Range:Font:Size := 9
    otb4:Cell(1,ic):Range:Font:Bold := wdToggle
    otb4:Cell(1,ic) := __text
    otb4:Columns:Item(ic):Select()
    if     ic = 1
           otb4:Columns:Item(ic):PreferredWidth := 100
           oWord:Selection:ParagraphFormat:Alignment :=
wdAlignParagraphLeft
    elseif ic = 2
           otb4:Columns:Item(ic):PreferredWidth := 50
           oWord:Selection:ParagraphFormat:Alignment :=
wdAlignParagraphCenter
    else
           otb4:Columns:Item(ic):PreferredWidth := 70
           oWord:Selection:ParagraphFormat:Alignment :=
wdAlignParagraphRight
    endi
    oWord:Selection:Collapse(wdCollapseEnd)
next

* Order Table

for i = 1 to nrow
    for j = 1 to ncol
        otb4:Cell(i+1,j):Range:Font:Name := "Courier New"
        otb4:Cell(i+1,j):Range:Font:Size := 8

        if j <= ncol-2
           __text := vtbl[i,j]
           otb4:Cell(i+1,j) := __text
        elseif j = ncol-1
           crng := otb4:Cell(i+1,j):Range

           odoc:FormFields:Add(crng,wdFieldFormTextInput)
        else
           formula := "="
           formula += "C" + alltrim(tran(i+1,'999'))
           formula += "*"
           formula += "F" + alltrim(tran(i+1,'999'))
           otb4:Cell(i+1,j):Formula(formula,"0,00")
        endi
    next
next
*
otb4:Cell(nrow+1,ncol):Range:Select()
oWord:Selection:Collapse(wdCollapseEnd)

oWord:ActiveDocument:Protect(wdAllowOnlyFormFields,.t.,"hu")
inkey(0)

odoc:SaveAS("C:\test\test.doc")

odoc:Close()
oWord:Quit()

return NIL

gerar arquivos em word usando harbour

MensagemEnviado: 04 Nov 2019 18:14
por JoséQuintas
Quando o Itamar postou o fonte, postou também a origem, o link no fórum do google.

Se é pra olhar como fica... melhor procurar outro exemplo.

Se realmente for mexer, pode usar o link de origem da mensagem e pedir o arquivo.

gerar arquivos em word usando harbour

MensagemEnviado: 05 Nov 2019 09:09
por Amparo
Ola amigos

bom dia a todos

em meu computador também não existe o arquivo winpar.ch

tente fazer o seguinte( um exemplo bem simples possível)

crie um arquivo rtf padrao por exemplo padrao.rtf neste arquivo todo conteudo que vc queira mudar voce coloca +- assim CLINOME, CLINFE, CLIEMISSAOe por ai vai.

no seu prg crie uma estrutura de tabela desta forma:


ARQRTF :=  "C:\TESTE\PADRAO.RTF"
TESTE := "C:\TESTE\TABELA.DBF"
CAMPOS := {{"DADOS","C",500,00}}
c_Contrato := ""

DBCREATE( TESTE, CAMPOS )

USE ( TESTE ) ALIASs TESTE NEW EXCLUSIVE

SELECT("TESTE")
APPEND FROM (ARQRTF) SDF

TESTE->( DBGOTOP() )

DO WHILE !TESTE->( EOF() )
  *aqui vc vai mudando suas variáveis de acordo com sua necessidade,

    IF "CLINOME" $ ARQDBF->DADOS
      CSTR := STRTRAN( ARQDBF->DADOS, "CLINOME", c_NomCli )
   ELSEIF "CLINFE" $ ARQDBF->DADOS
      CSTR := STRTRAN( ARQDBF->DADOS, "CLINFE", c_NumNfe )
   ELSEIF "CLIEMISSAO" $ ARQDBF->DADOS
      CSTR := STRTRAN( ARQDBF->DADOS, "CLIEMISSAO", c_DatEmi )
   ...
     ELSE
      CSTR := ARQDBF->DADOS
   ENDIF

   c_Contrato += ALLTRIM( CSTR ) + CRLF

    TESTE->( DBSKIP() )
ENDDO

MEMOWRIT( "c:\test\novortf.rtf", c_Contrato )

*depois é so mandar abrir e imprimir no word

IMPRIME_WORD( "c:\test\novortf.rtf")

*---------------------------------------------------------------------------------
procedure IMPRIME_WORD( CARQ )
Local oWord

oWord:=TOleAuto():New( "Word.Application" )
oWord:Documents:Open( CARQ )
oWord:WindowState := 1
oWord:Visible := .t.
oWord:PrintOut()   //PARA IMPRIMIR DIRETO

Return nil



não precisa declarar este winpar.ch

abraços

gerar arquivos em word usando harbour

MensagemEnviado: 09 Nov 2019 02:06
por cjp
Funcionou. Muito obrigado.

Duas dúvidas: 1) o que é CRLF? Seria pra colocar parágrafo? Aqui não funcionou, tive que retirar; 2) no final do texto ficou um "quadradinho"; é normal isso?

gerar arquivos em word usando harbour

MensagemEnviado: 10 Nov 2019 09:10
por clodoaldomonteiro
CRLF seria a quebra de linha.
Coloque isso no início do seu fonte principal ou no fonte .CH:
#define CRLF  chr(13)+chr(10)

gerar arquivos em word usando harbour

MensagemEnviado: 11 Nov 2019 08:53
por cjp
Entendido, obrigado.

gerar arquivos em word usando harbour

MensagemEnviado: 19 Nov 2019 15:37
por sasquast
Hasse,

Não tenho nem palavras para agradecer a enorme ajuda.

Muito obrigado a você e aos demais camaradas.

gerar arquivos em word usando harbour

MensagemEnviado: 19 Nov 2019 17:30
por Itamar M. Lins Jr.
Ola!
No harbour 3.4 usamos.
 hb_eol() 

Pq ? simples no Windows é CRLF = Carriage Return + Line feed->chr(13)+chr(10). No Linux é apenas Line Feed. ->chr(10).A função hb_eol(), detecta o OS é aplica corretamente o código. Isso dá uma certa confusão nos textos e documentos por exemplo.

Saudações,
Itamar M. Lins Jr.

gerar arquivos em word usando harbour

MensagemEnviado: 27 Mar 2020 20:49
por cjp
Pessoal, me surgiu uma nova necessidade aqui, vejam se vocês podem me ajudar, por favor.

A partir de um arquivo em pdf, usando harbour, é possível gerar um arquivo Word? Basicamente, quero apenas criar uma cópia do arquivo pdf para um arquivo word, usando harbour. É possível?

gerar arquivos em word usando harbour

MensagemEnviado: 29 Mar 2020 00:52
por fladimir
Em harbour nativo não sei, talvez com algum programa externo sendo chamado consiga.

Caso não consiga me chame em PVT q talvez consiga te ajudar.

gerar arquivos em word usando harbour

MensagemEnviado: 21 Abr 2020 17:26
por cjp
Pessoal, gostaria de saber se é possível criar o arquivo word com uma imagem, que é como um cabeçalho em todos os arquivos que vou criar. Não é uma imagem muito grande.
Tenho essa imagem em um arquivo do Word já salva. Só preciso colocar essa imagem em todos os arquivos que vou gerar a partir do meu sistema em Harbour.
É possível?

gerar arquivos em word usando harbour

MensagemEnviado: 18 Set 2020 10:36
por oxent_jabah
Bom Dia, Amigos!

Fiz umas alterações no fonte postado anteriormente e vejam o resultado, usando o MS-WORD direto!

gerar arquivos em word usando harbour

MensagemEnviado: 18 Set 2020 14:36
por malcarli
bom exemplo amigo. apanhei bastante do word para poder gerar documentos.

Agregando mais conhecimento ao seu exemplo pode-se usar ao invés de:

__text := win_OEMToANSI( "PD 9999999.DOC" )
oWord:Selection:TypeText( __text )

substituir por:
oWord:Selection:TypeText(hb_AnsiToOem( "PD 9999999.DOC"))

na minha opinião acho que fica mais claro o entendimento.

mais alguns comandos que uso:
oWord:Selection:EndKey(6) // encerra página atual
oWord:Selection:InsertBreak(1) // inicia nova página

e uso sem as constantes colocando direto o valor dos comandos, igual a função abaixo
Procedure fTitulo_Alinha(nAlinha, oWord, cTitulo)
   oWord:Selection:Font:Bold:= .T.                    // negrito
   oWord:Selection:Paragraphs:Alignment:= nAlinha     // 0 = alinhado a esquerda e 1 alinhado ao centro
   oWord:Selection:Font:Size:= 12                     // tamanho
   oWord:Selection:TypeText(hb_AnsiToOem(cTitulo) + hb_OsNewLine() + hb_OsNewLine())
   oWord:Selection:Font:Bold:= .F.                    // desabilita negrito
   oWord:Selection:Font:Size:= 11                     // tamanho
   oWord:Selection:Paragraphs:Alignment:= 3           // alinhamento justificado
Return (Nil)


Para inserir imagem no cabeçalho faço assim:
      *** Cabeçalho 
      oWord:ActiveDocument:ActiveWindow:Activepane:View:SeekView = 9
      oWord:Selection:Font:Name                                  = "Times New Roman" // fonte
      oWord:Selection:Font:Size                                  = 14                // tamanho
      oWord:Selection:Font:Bold                                  = .T.               // negrito
      oWord:Selection:Paragraphs:Alignment                       = 1                 // alinhado ao centro 

      oTable := oTexto:Tables:Add(oTexto:Range, 1, 2)                                // Cria uma célula com 2 colunas
      oTable:Columns:Item(1):Width = 50                                              // Largura da primeira célula
      oTable:Columns:Item(2):Width = If(nOrientacao == 0, 450, 700)                  // Largura da segunda célula
      oTable:Cell(1,1):Range:ParagraphFormat:Alignment = 1                           // alinhado ao centro
      If Hb_FileExists(DISKNAME() + ':' + PATHIMAGENS + [LOGO.BMP])
         oTable:Cell(1,1):Range:InlineShapes:AddPicture(DISKNAME() + ':' + PATHIMAGENS + [LOGO.BMP])     // Insere a imagem na primeira célula
      Endif
      oTable:Cell(1,2):Range:ParagraphFormat:Alignment = 1                           // alinhado ao centro
      oTable:Cell(1,2):Range:Text = AllTrim(hb_AnsiToOem(cEmpresa)) + hb_OsNewLine() + ; // 1º texto
                                    AllTrim(hb_AnsiToOem(cEndereco_p))                   // 2º texto

gerar arquivos em word usando harbour

MensagemEnviado: 13 Nov 2020 10:56
por marcosLP
Eu faço assim:
abro um arquivo vazio no word e vou formatando cfe. o cliente precisa, e depois uso o maladireta do proprio word para inserir campos de dados dentro da formatação que necessito e tá dando certo(tenho um sistema médico que precisa de laudos, exames, receitas...) e sai tudo como é pra ser, com letras em negrito, grids, tabelas, e tudo mais.
Dá um trabalho ma suma vez que vc cria o modelo depois é só atualizar dentro do proprio word.

gerar arquivos em word usando harbour

MensagemEnviado: 22 Abr 2023 14:20
por Kapiaba
boa tarde, testando o exemplo do oxent_jabah, me sai esta mensagem no .doc:

a entrada do auto texto não foi definida

em VB achei isto:

VB

NormalTemplate.AutoTextEntries("cName").Value = _
"The Johnson Company"
O exemplo a seguir exibe o nome e o valor da primeira entrada de AutoTexto do modelo anexado ao documento ativo.

VB

Set myTemplate = ActiveDocument.AttachedTemplate
MsgBox "Name = " & myTemplate.AutoTextEntries(1).Name & vbCr _
& "Value " & myTemplate.AutoTextEntries(1).Value

Como defino Autotexto no Harbour/xHarbour no Word?

Desde já, obrigado.

Regards, saludos.

gerar arquivos em word usando harbour

MensagemEnviado: 23 Abr 2023 10:04
por Kapiaba
Versão em FiveWin, caso alguém queira testar e ver se acha o erro:

https://forums.fivetechsupport.com/viewtopic.php?f=6&t=43084&p=259178&sid=49cf627237bfc9a8329574d91789d8e4#p259178

Regards, saludos.

gerar arquivos em word usando harbour

MensagemEnviado: 23 Abr 2023 12:21
por Kapiaba
isto funciona perfeito com Harbour, com xHarbour Quebra. Mistérios... Kgada de quem? kkkkkkk

// C:\FWH..\SAMPLES\WORDCENT.PRG

#Include "FiveWin.ch"

FUNCTION Main()

   LOCAL oWord
   // Convert 2.5 centimeters to points
   LOCAL nPts

   oWord := WinWordObj():New()

   nPts := oWord:CentimetersToPoints( 2.5 )

   // Display the result
   MsgInfo("2.5 centimeters = " + Str(nPts) + " points")

   // Quit Word
   oWord:Quit()

RETURN NIL
/*
// Create a Word application object
// LOCAL oWord := WinWordObj():New()   // HARBOUR FUNCIONA.
*/

// FIN / END


Regards, saludos.

gerar arquivos em word usando harbour

MensagemEnviado: 24 Abr 2023 08:05
por Kapiaba
Gracias. Super many thanks. resuelto, resolved.


// [url]https://forums.fivetechsupport.com/viewtopic.php?f=6&t=43084&sid=9e2195b9f98be69732a3ffa73a33b1db[/url]
// [url]https://forums.fivetechsupport.com/viewtopic.php?f=3&t=43093&sid=f314821d04e916bc11c25c4b9d2426a6[/url]

// C:\FWH..\SAMPLES\WORDCENT.PRG - Modificado by Jimmy/Natter/Rao.

#Include "FiveWin.ch"

// Harbour/xHarbour:
#xtranslate CentimetersToPoint(<n>)=>(<n>*28.35)
//#xtranslate PointToCentimeters(<n>)=>(<n>/28.35)
#xtranslate PointToCentimeters(<n>)=>(<n>*28.35)

FUNCTION Main()

   LOCAL oWord, nCms
   // Convert 2.5 centimeters to points
   LOCAL nPts

   oWord := WinWordObj()

   oWord := CreateObject("Word.Application")

   IF EMPTY( oWord )

      MsgInfo( "Microsoft Word not installied" )

      RETURN NIL

   ENDIF

   #ifdef __XHARBOUR__

      nPts := PointToCentimeters( 2.5 )        // xHarbour

   #else

      nPts := oWord:CentimetersToPoints( 2.5 ) // Harbour

   #endif

   // nCms := 2.5
   // nPts := nCms * 28.35

   // Display the result
   MsgInfo("2.5 centimeters = " + Str(nPts) + " points")

   // Quit Word
   oWord:Quit()

RETURN NIL

// FIN / END


Regards, saludos.

gerar arquivos em word usando harbour

MensagemEnviado: 24 Abr 2023 09:08
por JoséQuintas
Kapiaba escreveu:isto funciona perfeito com Harbour, com xHarbour Quebra. Mistérios... Kgada de quem? kkkkkkk


Tem resposta no fórum.
No XHarbour e suas LIBs é um carnaval, depende do que está usando.
Dependendo da LIB é CreateObject(), W32Ole(), ou outra.
E se fizer uso de duas no mesmo aplicativo, não lembro quais são, uma causa problema pra outra.
Deve estar no tópico da hbnfe.

Deveria ser atualizada diretamente no XHarbour pra não ficar diferente pra cada lib.
Mas não sei se depois de tanto tempo já não fizeram isso, e ficou faltando cada lib fazer sua atualização.

Isso e outras coisas fazem parte, ou deveriam fazer, da HBWIN.
E é dessa parte que falo que deveria ser padronizado no Harbour e XHarbour, assim todos falam a mesma língua.

Mas não.... fica uma função no fivewin, outra na minigui, outra não sei aonde... e acaba bagunçando tanto Xharbour quanto Harbour.
Todos perdem.

gerar arquivos em word usando harbour

MensagemEnviado: 24 Abr 2023 09:17
por JoséQuintas
http://pctoledo.com.br/forum/viewtopic.php?f=54&t=15754&p=93921&hilit=w32ole#p93921

Mencionam TOleAuto(), TOleAutoX(), xhb_CreateObject()

|Error TOleAutoX/65535 : TOLEAUTOX:NEW Arguments: ( [ 1] = Type: C Val: MSXML2.D|
|OMDocument.5.0 [ 2] = Type: U [ 3] = Type: O Val: { TOLEAUTOX Object }) |
| |
|Error at ...: TOLEAUTOX:NEW(96) in Module: W32OLE.PRG |
|Called from : XHB_CREATEOBJECT(27) in Module: W32OLE.PRG |

gerar arquivos em word usando harbour

MensagemEnviado: 24 Abr 2023 09:30
por Kapiaba
Thanks Mister Quintas. Neste caso, o XHARBOUR não tem culpa nenhuma, a culpa é do Linãres, que quando modificou a WIN32OLE.PRG do xharbour para FiveWin, não escreveu igual ao do Harbour.

O problema foi resolvido.

Abs.

Regards, saludos.

gerar arquivos em word usando harbour

MensagemEnviado: 24 Abr 2023 16:10
por Kapiaba
Mister Quintas, sabeis o que pode provocar este erro no Word:

ERRO! A ENTRADA DE AUTOTEXTO NÃO FOI DEFINIDA.

Obg. abs.

Regards, saludso.