Abrir um Word apartir d um arquivo Texto usando xHarbour+OLE

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Abrir um Word apartir d um arquivo Texto usando xHarbour+OLE

Mensagem por sygecom »

*O Exemplo abaixo pode ser usado em Modo console tmb. basta tirar as funções da Hwgui

Código: Selecionar todos

*************************
PROCEDURE Abre_word(cARQ)
*************************
LOCAL oWord,oText
PRIVATE oDlgHabla:=NIL
MsgRun("Aguarde Gerando Documento de Word...")

RenameFile( cARQ, "TEMP.DOC" )
cARQ="TEMP.DOC"

TRY
   oWord := GetActiveObject(  "Word.Application" )
CATCH
   TRY
      oWord := CreateObject( "Word.Application" )
   CATCH
      MsgStop("Não foi Possivel Achar o Word Instalado","Aviso do Sistema")
      IF oDlgHabla#NIL
        oDlgHabla:CLOSE()
      ENDIF
      RETURN
   END
END

IF !FILE(cARQ)
   MsgStop("Não Foi Localizar e Abrir o Documento de Word")
   IF oDlgHabla#NIL
     oDlgHabla:CLOSE()
   ENDIF
   RETURN
ENDIF
oWord:Documents:Open(cARQ)  //ABRE O WORD

oWord:Visible := .T. //PARA VISUALIZAR OU NÃO ANTES
oWord:WindowState := 1
oWord:PrintOut()   //PARA IMPRIMIR DIRETO

IF oDlgHabla#NIL
  oDlgHabla:CLOSE()
ENDIF
RETURN
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Amiguinhos

Quando se faz acesso via OLE em aplicativos como os do Office é necessário prever qual versão esta ativa e para tal sacar do artifício de testar antes por tentativa e erro, exemplo:

Código: Selecionar todos

   ...
   oWord := GetActiveObject(  "Word.Application" ) 
   ...
No trecho acima a variavel oWord deverá possuir dois valores NIL ou Objeto então:

Código: Selecionar todos

   ...
   do case
        case (oWord := GetActiveObject(  "Word.Application" )) = NIL
                ? "Versao Incorreta"
                return .t.
        case (oWord := GetActiveObject(  "Word.Application.9" )) = NIL
                ? "Versao Incorreta"
                return .t.
        case (oWord := GetActiveObject(  "Word.Application.10" )) = NIL
                ? "Versao Incorreta"
                return .t.
        case (oWord := GetActiveObject(  "Word.Application.11" )) = NIL
                ? "Versao Incorreta"
                return .t.
   endcase
   ...
Na função acima eu faço o teste para cada versão do controle até encontrar a que esta ativa e então executo a automação. Como não sei quais os valores serão apresentados caso encontre ou não o controle sugiro colocar ? oWord logo após a linha do GetActiveObject() para saber o conteudo a ser testado.

No caso do Office pode fazer o teste com 9, 10, 11 e o que retornar é o atualmente instalado na maquina.

A automação pode muito bem funcionar pra mim, mas não quer dizer que vá funcionar em outra maquina e portanto é necessário prever.
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.
edegar_metodo
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Ago 2008 18:29
Localização: Colorado - Pr

Re: Abrir um Word apartir d um arquivo Texto usando xHarbour+OLE

Mensagem por edegar_metodo »

Ola,

Parece que este caminho resolve um prob que tenho, para tanto gostaria de saber onde consigo a relaçao dos comandos que posso utilizar, digo apos imprimir fechar o word, como selecionar a impressora (sem passar pelo menu)....etc...

Fico no aguardo

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

Re: Abrir um Word apartir d um arquivo Texto usando xHarbour+OLE

Mensagem por rochinha »

Amiguinho

Voce podera usar funções do Harbour para manipular a impressora como, funções de lista, setup e fixagem de padrão.

Veja um pequeno trecho:

Código: Selecionar todos

   PrinterSetup() // Abre Printer Dialog para setup
   PRNcPort := PrnGetName() // Pega nome da impressora padrão
   PRNcFile := "notafisc.txt"
   PRNcSTAT := IsPrint(PRNcPort) // Uma função que modifiquei para testar a impressora
   FErase( PRNcFile )
   if PRNcSTAT = "Impressora OK"
      WaitRun( "notafisc.exe "+strzero(PN->IDPEDIDO), 7 ) // WaitRun é função do Fivewin
      if file( PRNcFile ) // Aqui faço uso de uma função de um amigo do forum passando parametros
         WaitRun( [WAPI -PRINT:"]+PRNcPort+[";]+PRNcFile+[;"Impressao";RESULTA.TXT], 7 )
      endif
   else
      MsgStop( "Impressora nao conectada" ) // MsgStop é função do Fivewin
   endif
   return .t.
[/code/

Para imprimir um documento usando automação com Word transparente:
[code]
// Using Microsoft Office Word ActiveX

#include "FiveWin.ch"

function Main()

   local oWnd, oActiveX

   oWord:=TOleAuto():New( "Word.Application" )
   oWord:Documents:Open( "C:\AUTOEXEC.BAT" )
   oWord:Visible := .f.
   oWord:WindowState := 0
   oWord:PrintOut()
   oWord:Quit()
   oWord:End()

return nil
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.
edegar_metodo
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Ago 2008 18:29
Localização: Colorado - Pr

Re: Abrir um Word apartir d um arquivo Texto usando xHarbour+OLE

Mensagem por edegar_metodo »

Amigo Rochinha.....

para facilitar ainda mais o que preciso, poderia seguir a seguinte ideia: (digo seguir pois compilei mas nao funcionou)

Código: Selecionar todos

#include "Fivewin.ch"
Funtion Main

Local PRNcPort:="",PRNcFile=""
       PRNcPort := PrnGetName() 
          // Pega nome da impressora padrão / poderia ser informado "\\micro40\pedidos"
       PRNcFile := "notafisc.rtf"
          // lembrando que meu arquivo esta em .rtf
       WaitRun( [WAPI -PRINT:"]+PRNcPort+[";]+PRNcFile+[;"Impressao";RESULTA.TXT], 7 )
         // se entendi e na linha acima que ele imprime ??
Como viu a idéia é simples (mas será que é funcional..rs)

Lembrando que em outro post vc usa o richedit.ch (onde consigo o mesmo caso necessite)

Grato,

ps. desculpe a insistencia, mas como disse parece ser tao simples ou sera que consigo um prg menor que o descrito acima??
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Abrir um Word apartir d um arquivo Texto usando xHarbour+OLE

Mensagem por rochinha »

Amiguinho,

voce pode usar desta forma:

Código: Selecionar todos

Local PRNcPort:="",PRNcFile=""
       PRNcPort := "\\micro40\pedidos" // PrnGetName() 
...
 
RICHEDIT.CH

Código: Selecionar todos

#ifndef _RICHEDIT_CH
#define _RICHEDIT_CH

#define CFM_BOLD                 1
#define CFM_ITALIC               2
#define CFM_UNDERLINE            4
#define CFM_STRIKEOUT            8

#define CFE_BOLD                 1
#define CFE_ITALIC               2
#define CFE_UNDERLINE            4
#define CFE_STRIKEOUT            8

#define PFA_LEFT                 1
#define PFA_RIGHT                2
#define PFA_CENTER               3
#define PFA_JUSTIFY              4

#define SF_TEXT                  1
#define SF_RTF                   2
#define SFF_SELECTION            32768

#define EM_GETSEL                176
#define EM_SCROLL                181
#define EM_GETMODIFY             184
#define EM_SETMODIFY             185
#define EM_GETLINECOUNT          186
#define EM_LINEINDEX             187
#define EM_CANUNDO               198
#define EM_REPLACESEL            194
#define EM_UNDO                  199

#define EM_POSFROMCHAR           ( WM_USER + 38 )
#define EM_CANPASTE              ( WM_USER + 50 )
#define EM_EXLIMITTEXT           ( WM_USER + 53 )
#define EM_EXLINEFROMCHAR        ( WM_USER + 54 )
#define EM_GETSELTEXT            ( WM_USER + 62 )
#define EM_SETBKGNDCOLOR         ( WM_USER + 67 )
#define EM_SETOPTIONS            ( WM_USER + 77 )

#define EM_SETUNDOLIMIT          ( WM_USER + 82 )
#define EM_REDO                  ( WM_USER + 84 )
#define EM_CANREDO               ( WM_USER + 85 )
#define EM_GETAUTOURLDETECT      ( WM_USER + 91 )

#define EM_SETTYPOGRAPHYOPTIONS  ( WM_USER + 202 )
#define EM_GETTYPOGRAPHYOPTIONS  ( WM_USER + 203 )

#define EN_LINK                  1803

#define ES_DISABLENOSCROLL       8192

#define ECO_READONLY             2048

#define ECOOP_OR                 2
#define ECOOP_XOR                4

#define TO_ADVANCEDTYPOGRAPHY    1


#xcommand REDEFINE RICHEDIT [ <oRTF> VAR ] <uVar> ;
             [ ID <nId> ] ;
             [ <dlg: OF, WINDOW, DIALOG> <oDlg> ] ;
             [ <help:HELPID, HELP ID> <nHelpId> ] ;
             [ FONT <oFont> ] ;
             [ MESSAGE <cMsg> ] ;
             [ <readonly: READONLY, NO MODIFY> ] ;
             [ <lHighlight: HIGHLIGHT> ] ;
             [ <file: FILE, FILENAME> <cFileName> ] ;
             [ RTFSIZE <nRTFSize> ] ;
             [ <lNoURL: NO URL> ] ;
             [ WHEN <uWhen> ] ;
             [ VALID <uValid> ] ;
             [ ON CHANGE <uChange> ] ;
       => ;
          [ <oRTF> := ] TRichEdit():ReDefine( <nId>, bSETGET(<uVar>), ;
                        <oDlg>, <nHelpId>, <oFont>, <cMsg>, <.readonly.>, ;
                        <.lHighlight.>, <cFileName>, <nRTFSize>, ;
                        <.lNoURL.>, <{uWhen}>, <{uValid}>, ;
                        [\{|nKey, nFlags, Self| <uChange>\}] )

#command @ <nTop>, <nLeft> RICHEDIT [ <oRTF> VAR ] <uVar> ;
             [ <dlg: OF, WINDOW, DIALOG> <oWnd> ] ;
             [ SIZE <nWidth>, <nHeight> ] ;
             [ FONT <oFont> ] ;
             [ <pixel: PIXEL> ] ;
             [ MESSAGE <cMsg> ] ;
             [ <lHScroll: HSCROLL> ] ;
             [ <readonly: READONLY, NO MODIFY> ] ;
             [ WHEN <uWhen> ] ;
             [ VALID <uValid> ] ;
             [ ON CHANGE <uChange> ] ;
             [ <lDesign: DESIGN> ] ;
             [ <lHighlight: HIGHLIGHT> ] ;
             [ <file: FILE, FILENAME> <cFileName> ] ;
             [ RTFSIZE <nRTFSize> ] ;
             [ <lNoURL: NO URL> ] ;
             [ <lNoScroll: NO SCROLL> ] ;
             [ <lNoBorder: NOBORDER, NO BORDER> ] ;
       => ;
          [ <oRTF> := ] TRichEdit():New( <nTop>, <nLeft>, bSETGET(<uVar>), ;
                        [<oWnd>], <nWidth>, <nHeight>, <oFont>, <.pixel.>, ;
                        <cMsg>, <.lHScroll.>, <.readonly.>, <{uWhen}>, ;
                        <{uValid}>, [\{|nKey, nFlags, Self| <uChange>\}], ;
                        <.lDesign.>, <.lHighlight.>, <cFileName>, <nRTFSize>, ;
                        <.lNoURL.>, <.lNoScroll.>, [<.lNoBorder.>] )

#endif
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.
edegar_metodo
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Ago 2008 18:29
Localização: Colorado - Pr

Re: Abrir um Word apartir d um arquivo Texto usando xHarbour+OLE

Mensagem por edegar_metodo »

Rochinha,,,,

acredito que o Espirito do bom velhinho (Noel), esta em voce (pois me aturar nos ultimos dias...rs), mas antes que o saco estoure..rs..

mais 3 perguntas:

1.
WaitRun( [WAPI -PRINT:"]+PRNcPort+[";]+PRNcFile+[;"Impressao";RESULTA.TXT], 7 )
// se entendi e na linha acima que ele imprime ??
o comando acima realmente vai imprimir, digo pois coloquei um txt e nao vez nada

2.
no exemplo para usar o word qnd coloco o open da o seguinte erro
++++++++++++++++++++ Internal Error Handling Information +++++++++++++++++++++

Subsystem Call ..: Word.Application:DOCUMENTS
System Code .....: 16389
Default Status ..: False
Description .....: E_FAIL
Operation .......: OPEN
Arguments .......: [ 1] = Type: C Val: teste.doc
Involved File ...:
Dos Error Code ..: 0

3.
este nao tem muito a ver, mas talvez saiba
estando eu no prompt do dos
type pedido.txt > \\micro40\epson (lembrando que eh uma impressora matricial) ---> funciona
type pedido.txt > \\micro50\hp1018 (lembrando que eh uma laser usb) -----> nao funciona
digo o arquivo vai para a fila, diz que esta imprimindo, mas nao sai nada
perguntei isto, pois tentei imprimir pelo prwin 1.0 e aconteceu o exemplo acima vai para fila mas nao imprime
Responder