Jump to content
Fivewin Brasil

Word


Theotokos

Recommended Posts

Olá

Uso o brOffice desta forma, abro ".DOC" ou ".ODT" e exibo o texto em um Dialog.

Veja o exemplo:


/*

** autor: JOSÉ MARIA DA SILVA (JMSILVA)

** xHarbour 1.2.1 com FIVEWIN

** DATA: 29/12/2011

** CIDADE: CARAGUATATUBA/SP

** OBS: PRECISA TER BROFFICE INSTALADO

*/

#INCLUDE "FIVEWIN.CH"

#include "FGet.ch"

Function Main ()

Local oService,oDesktop,oDocument,oTexto

Local oDlg,oGet,cVarTxt,cFile,aProp:={}

cFile := cGetFile("Arquivo (doc,odt)|*.doc;*.odt|",;

"Selecione o Arquivo (Doc/Odt)", 4 )

IF EMPTY(cFILE) ; RETURN nil ; ENDIF

cFile := "file:///"+StrTran(cFile,"\","/")

TRY

oService := TOleAuto():New("com.sun.star.ServiceManager")

CATCH

MSGSTOP("Desculpe, precisa ter o BrOffice instalado.","Alerta")

RETURN NIL

END

oDesktop := oService:createInstance("com.sun.star.frame.Desktop")

AAdd(aProp,MakePropertyValue(oService,"Hidden",.T.)) //seta prop para ocultar

oDocument := oDesktop:loadComponentFromURL(cFile, "_blank", 0, aProp) // {}) //abre o doc

//OBTÉM O TEXTO

oTexto = oDocument:getText()

cVarTxt := oTexto:getString()

oDocument:Close(.T.) //fechao doumento

DEFINE DIALOG oDlg TITLE "Visualiza documentos doc/odt" size 640,480

@ 0.5, 01 FORMAT GET oGet VAR cVarTXT OF oDlg SIZE 310,220 UPDATE

ACTIVATE DIALOG oDlg CENTERED

Return Nil

**==============================================================================

STATIC FUNCTION MakePropertyValue(oService,cName,nValue)

**==============================================================================

LOCAL oStruct := oService:Bridge_GetStruct("com.sun.star.beans.PropertyValue")

oStruct:Name := cName

oStruct:Value := nValue

RETURN(oStruct)

id=code>id=code>

Feliz 2012 a todos

xHarbour (9376), Fivewin 10/11

Link to comment
Share on other sites

Olá, eu de novo!

Se a ideia e visualizar o DOC na integra sem editar, a melhor opção seria está.


/*

** autor: JOSÉ MARIA DA SILVA (JMSILVA)

** xHarbour 1.2.1 com FIVEWIN

** DATA: 29/12/2011

** CIDADE: CARAGUATATUBA/SP

** OBS: PRECISA TER BROFFICE INSTALADO

** “writer_pdf_Export†=> Para salvar arquivos do Writer como PDF

*/

#INCLUDE "FIVEWIN.CH"

Function Main ()

Local oService,oDesktop,oDocument,oZip,oTip,oBRUSH,oActiveX

Local oDlg,oGet,cFile,aProp:={},cFilePDF,cSUrl

cFile := cGetFile("Arquivo (doc,odt)|*.doc;*.odt|",;

"Selecione o Arquivo (Doc/Odt)", 4 )

IF EMPTY(cFILE) ; RETURN nil ; ENDIF

cFile := "file:///"+StrTran(cFile,"\","/")

TRY

oService := TOleAuto():New("com.sun.star.ServiceManager")

CATCH

MSGSTOP("Desculpe, precisa ter o BrOffice instalado.","Alerta")

RETURN NIL

END

oDesktop := oService:createInstance("com.sun.star.frame.Desktop")

AAdd(aProp,MakePropertyValue(oService,"Hidden",.T.)) //seta prop para ocultar

oDocument := oDesktop:loadComponentFromURL(cFile, "_blank", 0, aProp) // {}) //abre o doc

//exportar para pdf

cFilePDF := "e:\xhbtest\test_PDF.pdf"

cSUrl := "file:///"+StrTran(cFilePDF,"\","/")

oZip := MakePropertyValue(oService, "CompressMode", 1)

oTip := MakePropertyValue(oService, "FilterName", "writer_pdf_Export")

oDocument:storeToURL(cSUrl, {oZip,oTip})

oDocument:Close(.T.) //fechao doumento

DEFINE BRUSH oBrush STYLE "BORLAND"

DEFINE DIALOG oDlg TITLE "Visualiza documentos doc/odt" size 640,480;

BRUSH oBrush

oActiveX := TActiveX():New(oDlg,"AcroPDF.PDF.1",3,2,;

oDlg:nRight/2-5,oDlg:nBottom/2-5)

ACTIVATE DIALOG oDlg CENTERED;

ON INIT (oActiveX:Do("LoadFile",cFilePDF), oActiveX:Do("SetCurrentPage",1))

oDlg:End()

//apaga pdf

//Ferase(cFilePDF)

Return Nil

**==============================================================================

STATIC FUNCTION MakePropertyValue(oService,cName,nValue)

**==============================================================================

LOCAL oStruct := oService:Bridge_GetStruct("com.sun.star.beans.PropertyValue")

oStruct:Name := cName

oStruct:Value := nValue

RETURN(oStruct)

id=code>id=code>

Feliz 2012 a todos

xHarbour (9376), Fivewin 10/11

Link to comment
Share on other sites

intao... como disse lah em cima (hehehe)

citação:

Ola...

uma x tive q implementar isso no sistema, e a melhor forma q foi possivel, foi com TRichEdit().

[]'s

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)


id=quote>id=quote>

ou seja, nao precisa ter nem word nem oppen office instalado... tudo eh controlado pela propria app, e nao deixa nada a desejar comparado ao word ou oppen office... creio q vale a pena tambem vc avaliar com o TRichEdit().

veja a figura copiada da app:

http://imageshack.us/photo/my-images/233/wordnaapp.png/

[]'s

Editado por - gibaf on 30/12/2011 17:14:25

Link to comment
Share on other sites

A solução apresentada pelo Gibaf é plausível, tb a uso, porém gostaria perguntá-lo como faz para LER um arquivo do Word (.doc) obter o seu conteúdo para visualizar/editar o conteúdo com TRichEdit() sem que tenha instanciado ActiveX do Word. (É possível, sem que o usuário salve o arquivo como .RTF? parece que este é o problema do amigo).

Quanto ao BROFFICE lembrando é gratuito basta instalar mesmo q o cliente não usa, em alguns casos adotaram na empresa o BROFFICE como padrão.

Qto uma solução para Office Microsoft vou tentar cria um exemplo para postar, mas se eu conseguir vai precisar ter o pacote da Microsoft instalado, pelo menos por hora é a solução que posso sugerir.

Link to comment
Share on other sites

Olá amigo, como prometi fiz uma rotina para o Word, porém não testei pq não tenho Word instalado, segue o site que usei para consulta.

Espero que tenha ajudado, feliz 2012! a vc e todos os nossos amigos...


/*

Site para pesquisa:

http://msdn.microsoft.com/en-us/library/aa211881%28v=office.11%29.aspx

*/

#Include "Fivewin.ch"

**==============================================================================

Function Main()

**==============================================================================

LOCAL cFile := CurDrive()+":\"+CurDir()+"\teste.doc"

LOCAL oWord, oDocument, oText, cText

TRY

oWord := CreateObject( "Word.Application" )

CATCH

MsgStop("ERRO! Word não instalado.","Alerta")

RETURN Nil

END

oDocument := oWord:documents:open(cFile) //abre um arquivo doc/rtf

// get -> seleciona o objeto

oText := oWord:selection()

// oculta o word

oWord:visible := .F.

cText := oText:Text

oDocument:close() //fecha o doc

oWord:quit() //finaliza

MsgInfo(cText)

Return Nil

id=code>id=code>

Agora vou para beira do Mar ver a queima fogos.....apesar da chuva.....

Link to comment
Share on other sites

Vlw! amigo! FELIZ 2012....

citação:

Olá amigo, como prometi fiz uma rotina para o Word, porém não testei pq não tenho Word instalado, segue o site que usei para consulta.

Espero que tenha ajudado, feliz 2012! a vc e todos os nossos amigos...


/*

Site para pesquisa:

http://msdn.microsoft.com/en-us/library/aa211881%28v=office.11%29.aspx

*/

#Include "Fivewin.ch"

**==============================================================================

Function Main()

**==============================================================================

LOCAL cFile := CurDrive()+":\"+CurDir()+"\teste.doc"

LOCAL oWord, oDocument, oText, cText

TRY

oWord := CreateObject( "Word.Application" )

CATCH

MsgStop("ERRO! Word não instalado.","Alerta")

RETURN Nil

END

oDocument := oWord:documents:open(cFile) //abre um arquivo doc/rtf

// get -> seleciona o objeto

oText := oWord:selection()

// oculta o word

oWord:visible := .F.

cText := oText:Text

oDocument:close() //fecha o doc

oWord:quit() //finaliza

MsgInfo(cText)

Return Nil

id=code>id=code>

Agora vou para beira do Mar ver a queima fogos.....apesar da chuva.....


id=quote>id=quote>

Perfil.jpg

Link to comment
Share on other sites

Após fazer testes verifiquei que faltou três linhas de comandos para rotina funcionar corretamente, que estão grafadas com "//NOVO".


/*

Site para pesquisa:

http://msdn.microsoft.com/en-us/library/aa211881%28v=office.11%29.aspx

*/

#Include "Fivewin.ch"

**==============================================================================

Function Main()

**==============================================================================

LOCAL cFile := CurDrive()+":\"+CurDir()+"\teste.doc"

LOCAL oWord, oDocument, oText, cText

TRY

oWord := CreateObject( "Word.Application" )

CATCH

MsgStop("ERRO! Word não instalado.","Alerta")

RETURN Nil

END

// oculta o word

oWord:visible := .F.

//--

oDocument := oWord:documents:open(cFile) //abre um arquivo doc/rtf

//--

oDocument:Activate() //novo

//--

oRng := oDocument:Content //novo

oRng:Select() //novo

//--

oText := oWord:selection()

cText := oText:Text

//--

oDocument:close() //fecha o doc

oWord:quit() //finaliza

//--

MsgStop(cText)

Return Nil

id=code>id=code>

Editado por - JMSILVA on 04/01/2012 09:28:54

Link to comment
Share on other sites

Boa Tarde Rone..

Uso assim para consultar, os empregadores(Clientes) fazem a listagem no Word durante o mês todo e vão me mandando aleatoriamente, vou salvando cada um em sua pasta, depois antes de fazer os fechamentos mensais abro para ver quem vai entrar de férias no mês para fazer os calculos dos encargos..


cDoc="C:\PESSOAL9\&wProp\FERIAS.DOC" && wProp é a pasta da emrpesaid=red>

PRIVATE oDlgIE, oActiveX, cEvents:="", oExplorer

Define Dialog oDlgIE From 0,0 TO 550,950 PIXEL Title " ..:: Acessando:"+cDoc

oDlgIE:lHelpIcon:=.F.

oActiveX:=TActiveX():New( oDlgIE, "Shell.Explorer",10,15,450,237 )

oDlgIE:oClient:=oActiveX

// oDlgIE:bPainted = { | hDC | GradientFill( hDC, 0, 0, oDlgIE:nHeight, oDlgIE:nWidth, { { 0.50, 16054371, 8388608 } } ) }

Activate Dialog oDlgIE Centered;

On Init(mBarraStatus(cDoc),oActiveX:Do( "Navigate", cDoc ))

Return(nil)

Static Func mBarraStatus(cDoc)

SET MESSAGE OF oDlgie TO "Consultas a tabelas de férias" 2007

RETURN(.t.)

id=code>id=code>

Abraços..

Luiz Arruda

Corumbá-MS

ico.corumba@gmail.com |

http://www.facebook.com/profile.php?id=100000933378029

euchapeu.png

FiveWin 9.04

xHarbour

PellesC

Bcc

Editado por - ico on 04/01/2012 17:13:15

Link to comment
Share on other sites

Vlw! mas o arquivo não deveria abrir dentro do Dialog? é que qdo executo a tua rotina, ele abre o word e mostra o arquivo... mas se testo com uma pagina da internet na variavel cDoc ai abre na dialog... tem como, faltou alguma coisa que tenho que fazer? id=red>

obrigado!!!

citação:

Boa Tarde Rone..

Uso assim para consultar, os empregadores(Clientes) fazem a listagem no Word durante o mês todo e vão me mandando aleatoriamente, vou salvando cada um em sua pasta, depois antes de fazer os fechamentos mensais abro para ver quem vai entrar de férias no mês para fazer os calculos dos encargos..


cDoc="C:\PESSOAL9\&wProp\FERIAS.DOC" && wProp é a pasta da emrpesaid=red>

PRIVATE oDlgIE, oActiveX, cEvents:="", oExplorer

Define Dialog oDlgIE From 0,0 TO 550,950 PIXEL Title " ..:: Acessando:"+cDoc

oDlgIE:lHelpIcon:=.F.

oActiveX:=TActiveX():New( oDlgIE, "Shell.Explorer",10,15,450,237 )

oDlgIE:oClient:=oActiveX

// oDlgIE:bPainted = { | hDC | GradientFill( hDC, 0, 0, oDlgIE:nHeight, oDlgIE:nWidth, { { 0.50, 16054371, 8388608 } } ) }

Activate Dialog oDlgIE Centered;

On Init(mBarraStatus(cDoc),oActiveX:Do( "Navigate", cDoc ))

Return(nil)

Static Func mBarraStatus(cDoc)

SET MESSAGE OF oDlgie TO "Consultas a tabelas de férias" 2007

RETURN(.t.)

id=code>id=code>

Abraços..

Luiz Arruda

Corumbá-MS

ico.corumba@gmail.com |

http://www.facebook.com/profile.php?id=100000933378029

euchapeu.png

FiveWin 9.04

xHarbour

PellesC

Bcc

Editado por - ico on 04/01/2012 17:13:15


id=quote>id=quote>

Perfil.jpg

Link to comment
Share on other sites

Realmente não funcionou, mas agora sim... Vlw!!!

Obrigado!!!

citação:

Após fazer testes verifiquei que faltou três linhas de comandos para rotina funcionar corretamente, que estão grafadas com "//NOVO".


/*

Site para pesquisa:

http://msdn.microsoft.com/en-us/library/aa211881%28v=office.11%29.aspx

*/

#Include "Fivewin.ch"

**==============================================================================

Function Main()

**==============================================================================

LOCAL cFile := CurDrive()+":\"+CurDir()+"\teste.doc"

LOCAL oWord, oDocument, oText, cText

TRY

oWord := CreateObject( "Word.Application" )

CATCH

MsgStop("ERRO! Word não instalado.","Alerta")

RETURN Nil

END

// oculta o word

oWord:visible := .F.

//--

oDocument := oWord:documents:open(cFile) //abre um arquivo doc/rtf

//--

oDocument:Activate() //novo

//--

oRng := oDocument:Content //novo

oRng:Select() //novo

//--

oText := oWord:selection()

cText := oText:Text

//--

oDocument:close() //fecha o doc

oWord:quit() //finaliza

//--

MsgStop(cText)

Return Nil

id=code>id=code>

Editado por - JMSILVA on 04/01/2012 09:28:54


id=quote>id=quote>

Perfil.jpg

Link to comment
Share on other sites

Luiz nao consegui testar o teu exemplo, esta dando este erro:


Aplicação

===========

Nome e Local : D:\WinPRG\Vinhos\Grafico.EXE (32 bits)

Size: 4,102,144 bytes

Time from start: 0 hours 0 mins 9 secs

Error occurred at: 05/01/2012, 18:36:49

Descrição do Erro : Error BASE/1005 Message not found: TACTIVEX:_TITLEBAR

Stack Calls

===========

Called from: tobject.prg => TACTIVEX:ERROR(172)

Called from: tobject.prg => TACTIVEX:MSGNOTFOUND(205)

Called from: tobject.prg => TACTIVEX:_TITLEBAR(0)

Called from: officev.prg => (b)OFFICEVIEWER:OFFICEVIEWER(32)

Called from: => OFFICEVIEWER:TITLEBAR(0)

Called from: UTILEST.PRG => LERWORD(1669)

Called from: GRAFICO.PRG => (b)BUILDMENU(355)

Called from: MENU.PRG => TMENU:COMMAND(0)

Called from: WINDOW.PRG => TWINDOW:COMMAND(0)

Called from: MDIFRAME.PRG => TMDIFRAME:COMMAND(0)

Called from: => TMDIFRAME:HANDLEEVENT(0)

Called from: WINDOW.PRG => _FWH(0)

Called from: => WINRUN(0)

Called from: WINDOW.PRG => TMDIFRAME:ACTIVATE(0)

Called from: GRAFICO.PRG => MAIN(285)

id=code>id=code>

Perfil.jpg

Link to comment
Share on other sites

citação:

desabilite a opcao dentro do seu exemplo:

* oWord:TitleBar(.f.)

pois ele tira o titulo do topo...

esse objeto: oWord esta definido ,, tem que registrar tambem o officeviewer.ocx....


id=quote>id=quote>

o objeto oWord esta declarada como PRIVATE e mesmo tirando o oWord:TitleBar(.f.) continua o erro..

Perfil.jpg

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...