Search  
Thursday, May 24, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Office Automation  Crearea de fisi...
 Crearea de fisiere *.doc si *.xls din VisualFoxPro 6-9
 
 4/2/2009 10:41:52 AM
User is offlineRomeo
527 posts
1st


Crearea de fisiere *.doc si *.xls din VisualFoxPro 6-9
 (N/A)
Crearea de documente word:

SET DEVICE TO f:\test.doc
@ 1,5 say 'mesaj 1 '
@ 3,5 say 'mesaj 2 '
@ 7,5 say 'etc '
SET DEVICE TO SCREEN


Crearea de documente excel:

SET DEVICE TO c:\test.xls
@ 1,5 say 'mesaj 1 '
@ 3,5 say 'mesaj 2 '
@ 7,5 say 'etc '
SET DEVICE TO SCREEN

Documentele pot fi vizualizate cu OpenOffice.

Prin urmsare se pot crea/consulta rapoarte doc-xls fara a avea licenta de Office: doar cu Open Office.

Slava Tatalui si Fiului si Sfantului Duh si acum si pururea si-n vecii vecilor. Amin.
 4/2/2009 11:02:11 AM
User is offlineDaniel Buduru
2334 posts
1st




Re: Crearea de fisiere *.doc si *.xls din VisualFoxPro 6-9
 (N/A)
Sintaxa corecta este
SET DEVICE TO FILE c:\test.xls
Numai ca ambele exemple data creeaza fisiere text, si atat.
Chiar daca extensia este doc sau xls.
Se pot vizualiza cu OpenOffice, dar, la fel de bine, cu Notepad sau cu MODI FILE test.xls.

Pentru a crea fisiere xls fara automation - deci fara a utiliza o alta aplicatie, care lucreaza nativ cu acest tip de fisiere si care este comandata din VFP - este  disponibila doar comanda COPY TO ... TYPE XLS (sau XL5).

Nu stiu vreo cale de a crea fisiere doc din VFP fara automation.



Daniel Buduru
 4/3/2009 10:56:10 AM
User is offlineRomeo
527 posts
1st


Re: Crearea de fisiere *.doc si *.xls din VisualFoxPro 6-9
 (N/A)
Ai dreptate m-am grabit cu concluziile. Afisarea in OpenOffice cu un font monospatiat, pe o pagina predefinita A4 are un oarecare avantaj asupra Notepad. Poti construi un fel de raport, tiparibil/editabil pagina cu pagina - cu chenare, sublinieri etc. Pt cine n-are bani pt o licenta Word se rezolva niste probleme.

Pana la urma de ce le este asa de greu celor de la OpenOffice sa faca o interfata compatibila cu automation pt versiunte windows ? Ar rezolva multe din problemele raportarii in format Office.

Nu exista nici un soft free care sa permita rearea documentelor text formatate prin tehnologie automation ?

Slava Tatalui si Fiului si Sfantului Duh si acum si pururea si-n vecii vecilor. Amin.
 4/3/2009 4:40:47 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Crearea de fisiere *.doc si *.xls din VisualFoxPro 6-9
 (Romania)

 Romeo wrote
Ai dreptate m-am grabit cu concluziile. Afisarea in OpenOffice cu un font monospatiat, pe o pagina predefinita A4 are un oarecare avantaj asupra Notepad. Poti construi un fel de raport, tiparibil/editabil pagina cu pagina - cu chenare, sublinieri etc. Pt cine n-are bani pt o licenta Word se rezolva niste probleme.

Pana la urma de ce le este asa de greu celor de la OpenOffice sa faca o interfata compatibila cu automation pt versiunte windows ? Ar rezolva multe din problemele raportarii in format Office.

Nu exista nici un soft free care sa permita rearea documentelor text formatate prin tehnologie automation ?

1. Exista o interfata automation in OpenOffice. Uite-aici un articol (pe care l-am gasit dand search in google "open office automation foxpro"): http://www.tedroche.com/Present/VFPOOoAutomation.htm

2. Ce intelegi prin "documente text formatate prin tehnologie automation"? e prima data cand aud expresia asta ;)


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 4/4/2009 8:59:30 AM
User is offlineRomeo
527 posts
1st


Re: Crearea de fisiere *.doc si *.xls din VisualFoxPro 6-9
 (N/A)
 

2. Ce intelegi prin "documente text formatate prin tehnologie automation"? e prima data cand aud expresia asta ;)



Exprimarea este neriguroasa.
Doresc sa creez un document doc astfel incat titlul sa fie scris cu un anumit font-culoare-subliniere; care sa contina tabele in care diverse coloane sa aiba diverse fonturi culori inclusiv fundaluri - in functie de continutul campurilor dintr-un dbf; lungimi latimi diferite pt linii coloane. Similar pt documente xls.

Dorinta mea era ca sa nu fie nevoie ca utilizatorul sa fie obligat sa plateasca taxa Microsoft pt Office, si sa existe o solutie free de tipul OpenOffice sau vreun alt Office cum sunt multe in Linux.
Impresia mea era ca cei de la Open Office au dorit compatibilitate 100% windows-linux si de aici lipsa lor de entuziasm pt solutii Microsoft-automation.

Slava Tatalui si Fiului si Sfantului Duh si acum si pururea si-n vecii vecilor. Amin.
 4/4/2009 10:18:21 AM
User is offlineRomeo
527 posts
1st


Re: Crearea de fisiere *.doc si *.xls din VisualFoxPro 6-9
 (N/A)
Am gasit in sfarsit un exemplu care merge; creaza o foaie c:\exemple.xls si c:\exemple.sxw
( http://www.oooforum.org/forum/viewtopic.phtml?t=4996 )

VfpOOoCalcExample()

PROCEDURE VfpOOoCalcExample()
* Create a spreadsheet.
LOCAL oDoc
oDoc = OOoOpenURL( "private:factory/scalc" )

* Get first sheet
LOCAL oSheet
oSheet = oDoc.getSheets().getByIndex( 0 )

*-----
* Put some sales figures onto the sheet.
oSheet.getCellByPosition( 0, 0 ).setString( "Month" )
oSheet.getCellByPosition( 1, 0 ).setString( "Sales" )
oSheet.getCellByPosition( 2, 0 ).setString( "End Date" )

oSheet.getCellByPosition( 0, 1 ).setString( "Jan" )
oSheet.getCellByPosition( 0, 2 ).setString( "Feb" )
oSheet.getCellByPosition( 0, 3 ).setString( "Mar" )
oSheet.getCellByPosition( 0, 4 ).setString( "Apr" )
oSheet.getCellByPosition( 0, 5 ).setString( "May" )
oSheet.getCellByPosition( 0, 6 ).setString( "Jun" )
oSheet.getCellByPosition( 0, 7 ).setString( "Jul" )
oSheet.getCellByPosition( 0, 8 ).setString( "Aug" )
oSheet.getCellByPosition( 0, 9 ).setString( "Sep" )
oSheet.getCellByPosition( 0, 10 ).setString( "Oct" )
oSheet.getCellByPosition( 0, 11 ).setString( "Nov" )
oSheet.getCellByPosition( 0, 12 ).setString( "Dec" )

oSheet.getCellByPosition( 1, 1 ).setValue( 3826.37 )
oSheet.getCellByPosition( 1, 2 ).setValue( 3504.21 )
oSheet.getCellByPosition( 1, 3 ).setValue( 2961.45 )
oSheet.getCellByPosition( 1, 4 ).setValue( 2504.12 )
oSheet.getCellByPosition( 1, 5 ).setValue( 2713.98 )
oSheet.getCellByPosition( 1, 6 ).setValue( 2448.17 )
oSheet.getCellByPosition( 1, 7 ).setValue( 1802.13 )
oSheet.getCellByPosition( 1, 8 ).setValue( 2203.22 )
oSheet.getCellByPosition( 1, 9 ).setValue( 1502.54 )
oSheet.getCellByPosition( 1, 10 ).setValue( 1207.68 )
oSheet.getCellByPosition( 1, 11 ).setValue( 1819.71 )
oSheet.getCellByPosition( 1, 12 ).setValue( 986.03 )

oSheet.getCellByPosition( 2, 1 ).setFormula( "=DATE(2004;01;31)" )
oSheet.getCellByPosition( 2, 2 ).setFormula( "=DATE(2004;02;29)" )
oSheet.getCellByPosition( 2, 3 ).setFormula( "=DATE(2004;03;31)" )
oSheet.getCellByPosition( 2, 4 ).setFormula( "=DATE(2004;04;30)" )
oSheet.getCellByPosition( 2, 5 ).setFormula( "=DATE(2004;05;31)" )
oSheet.getCellByPosition( 2, 6 ).setFormula( "=DATE(2004;06;30)" )
oSheet.getCellByPosition( 2, 7 ).setFormula( "=DATE(2004;07;31)" )
oSheet.getCellByPosition( 2, 8 ).setFormula( "=DATE(2004;08;31)" )
oSheet.getCellByPosition( 2, 9 ).setFormula( "=DATE(2004;09;30)" )
* Note that these last three dates are not set as DATE() function calls.
oSheet.getCellByPosition( 2, 10 ).setFormula( "10/31/2004" )
oSheet.getCellByPosition( 2, 11 ).setFormula( "11/30/2004" )
oSheet.getCellRangeByName( "C13" ).setFormula( "12/31/2004" )
*-----

* Format the date cells as dates.
oFormats = oDoc.getNumberFormats()
oLocale = OOoCreateStruct( "com.sun.star.lang.Locale" )
* com.sun.star.util.NumberFormat.DATE = 2
nDateKey = oFormats.getStandardFormat( 2, oLocale )
oCell = oSheet.getCellRangeByName( "C2:C13" )
oCell.NumberFormat = nDateKey

LOCAL ARRAY aOneArg[1]
LOCAL cFile, cURL

* cFile = GetDesktopFolderPathname()+"example"
cFile = "c:\example"

* Now save the spreadsheet.
cURL = OOoConvertToURL( cFile + ".sxw" )
aOneArg[1] = OOoMakePropertyValue( "Overwrite", .T. )
oDoc.storeToUrl( cURL, @ aOneArg )

* Now save it as Excel
cURL = OOoConvertToURL( cFile + ".xls" )
aOneArg[1] = OOoMakePropertyValue( "FilterName", "MS Excel 97" )
oDoc.storeToUrl( cURL, @ aOneArg )

* Close the document.
* oDoc.close( 1 ) && TRUE
ENDPROC





* Open or Create a document from it's URL.
* New documents are created by URL's such as:
* private:factory/sdraw
* private:factory/swriter
* private:factory/scalc
* private:factory/simpress
FUNCTION OOoOpenURL( cURL )
* LOCAL oPropertyValue
* oPropertyValue = OOoCreateStruct( "com.sun.star.beans.PropertyValue" )

* LOCAL ARRAY aNoArgs[1]
* aNoArgs[1] = oPropertyValue
* aNoArgs[1].Name = "ReadOnly"
* aNoArgs[1].Value = .F.

* These two lines replace the alternate version above,
* which are left commented for the insight they provide.
LOCAL ARRAY aNoArgs[1]
aNoArgs[1] = OOoMakePropertyValue( "Hidden", .F. )

LOCAL oDesktop
oDesktop = OOoGetDesktop()

LOCAL oDoc
oDoc = oDesktop.LoadComponentFromUrl( cURL, "_blank", 0, @ aNoargs )

* Make sure that arrays passed to this document are passed zero based.
COMARRAY( oDoc, 10 )

RETURN oDoc
ENDFUNC

* Create a com.sun.star.beans.PropertyValue struct and return it.
FUNCTION OOoMakePropertyValue( cName, uValue, nHandle, nState )
LOCAL oPropertyValue
oPropertyValue = OOoCreateStruct( "com.sun.star.beans.PropertyValue" )

oPropertyValue.Name = cName
oPropertyValue.Value = uValue

IF TYPE([nHandle])="N"
oPropertyValue.Handle = nHandle
ENDIF
IF TYPE([nState])="N"
oPropertyValue.State = nState
ENDIF

RETURN oPropertyValue
ENDFUNC



* Sugar coated routine to create any UNO struct.
* Use the Bridge_GetStruct() feature of the OLE-UNO bridge.
FUNCTION OOoCreateStruct( cTypeName )
LOCAL oServiceManager
oServiceManager = OOoGetServiceManager()

LOCAL oStruct
oStruct = .NULL.

LOCAL cOldErrHandler
cOldErrHandler = ON( "ERROR" )
ON ERROR = DoNothing__ErrorHandler( ERROR(), MESSAGE(), LINENO(), SYS(16), PROGRAM(), SYS(2018) )
oStruct = oServiceManager.Bridge_GetStruct( cTypeName )
ON ERROR &cOldErrHandler

IF ISNULL( oStruct )
=__OOoReleaseCachedVars()
oServiceManager = OOoGetServiceManager()
oStruct = oServiceManager.Bridge_GetStruct( cTypeName )
ENDIF

RETURN oStruct
ENDFUNC


* Return the OpenOffice.org desktop object.
* Cache it in a global variable.
* Create it if not already cached.
FUNCTION OOoGetDesktop()
IF (TYPE([goOOoDesktop])!="O") OR ISNULL( goOOoDesktop )
PUBLIC goOOoDesktop
goOOoDesktop = OOoServiceManager_CreateInstance( "com.sun.star.frame.Desktop" )
COMARRAY( goOOoDesktop, 10 )
ENDIF
RETURN goOOoDesktop
ENDFUNC



* Return the OpenOffice.org service manager object.
* Cache it in a global variable.
* Create it if not already cached.
FUNCTION OOoGetServiceManager()
IF (TYPE([goOOoServiceManager])!="O") OR ISNULL( goOOoServiceManager )
PUBLIC goOOoServiceManager
goOOoServiceManager = CREATEOBJECT( "com.sun.star.ServiceManager" )
ENDIF
RETURN goOOoServiceManager
ENDFUNC


* Sugar coated routine to ask the service manager to
* create you an instance of some other OpenOffice.org UNO object.
FUNCTION OOoServiceManager_CreateInstance( cServiceName )
LOCAL oServiceManager
oServiceManager = OOoGetServiceManager()

LOCAL oInstance
oInstance = .NULL.

LOCAL cOldErrHandler
cOldErrHandler = ON( "ERROR" )
ON ERROR = DoNothing__ErrorHandler( ERROR(), MESSAGE(), LINENO(), SYS(16), PROGRAM(), SYS(2018) )
oInstance = oServiceManager.createInstance( cServiceName )
ON ERROR &cOldErrHandler

IF ISNULL( oInstance )
=__OOoReleaseCachedVars()
oServiceManager = OOoGetServiceManager()
oInstance = oServiceManager.createInstance( cServiceName )
ENDIF

RETURN oInstance
ENDFUNC


PROCEDURE DoNothing__ErrorHandler( pnError, pcErrMessage, pnLineNo, pcProgramFileSys16, pcProgram, pcErrorParamSys2018 )
ENDPROC


PROCEDURE __OOoReleaseCachedVars()
RELEASE goOOoServiceManager, goOOoDesktop, goOOoCoreReflection
ENDPROC


* Convert a local filename to an OOo URL.
FUNCTION OOoConvertToURL( cFilename )
* Ensure leading slash.
IF LEFT( cFilename, 1 ) != "/"
cFileName = "/" + cFileName
ENDIF

LOCAL cURL
cURL = CHRTRAN( cFilename, "\", "/" ) && change backslashes to forward slashes.
cURL = "file://" + cURL
RETURN cURL
ENDFUNC

Slava Tatalui si Fiului si Sfantului Duh si acum si pururea si-n vecii vecilor. Amin.
  Visual FoxPro  Office Automation  Crearea de fisi...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement