Página 1 de 1
Abrir um Word apartir d um arquivo Texto usando xHarbour+OLE
Enviado: 12 Out 2007 04:17
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
Enviado: 24 Out 2007 19:01
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:
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.
Re: Abrir um Word apartir d um arquivo Texto usando xHarbour+OLE
Enviado: 15 Dez 2008 18:20
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
Re: Abrir um Word apartir d um arquivo Texto usando xHarbour+OLE
Enviado: 15 Dez 2008 23:25
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
Re: Abrir um Word apartir d um arquivo Texto usando xHarbour+OLE
Enviado: 16 Dez 2008 10:32
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??
Re: Abrir um Word apartir d um arquivo Texto usando xHarbour+OLE
Enviado: 16 Dez 2008 11:10
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
Re: Abrir um Word apartir d um arquivo Texto usando xHarbour+OLE
Enviado: 16 Dez 2008 11:58
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