* I called this file 'wrtest.prg' * modified only slightly from the example at * http://www.foxite.com/articles/create_a_report_in_the_microsoft_word_format_008.htm * LOCAL lcTemplate, lcReport && To set the file of the template lcTemplate='C:\DOCUME~1\ARGRANT\MYDOCU~1\VISUAL~1\EmplTamp1.doc' && file 'template' * for this example the word doc must exist - should look like this in Word: * *Employees List * *<date()> *<GetEmployeeList()> * *<gcFoot> lcReport='C:\DOCUME~1\ARGRANT\MYDOCU~1\VISUAL~1\EmployeeList.doc' && output filename PUBLIC gcFoot gcFoot='This list includes the employees, '+; 'which help the customers to cope with their problems.'+; CHR(13)+CHR(13)+; 'Joe Bagofdonuts,'+CHR(13)+; 'Personnel Manager' LOCAL loReport loReport=CREATEOBJECT('WordReport', lcTemplate, lcReport) loReport.SHOW() loReport.CREATE() loReport.PRINT() loReport.HIDE() DO WHILE MESSAGEBOX('Print is complete?',; 4+32+256,; 'WordReport Class')=7 ENDDO RETURN *----------------------------------------------------------- FUNCTION GetEmployeeList() *----------------------------------------------------------- IF !USED('EMPLLIST') CREATE CURSOR 'empllist' (FIRST_NAME c(18),LAST_NAME c(18), TITLE c(18)) INSERT INTO 'empllist' (FIRST_NAME, LAST_NAME, TITLE) VALUES ('James', 'Kirk', 'Captain') INSERT INTO 'empllist' (FIRST_NAME, LAST_NAME, TITLE) VALUES ('Montgomery', 'Scott', 'Engineer') ENDIF SELE 'empllist' LOCAL lcList lcList='' SCAN lcList= lcList+; PADR(ALLT(empllist.FIRST_NAME)+' '+; ALLT(empllist.LAST_NAME),30,' ')+; ' - '+empllist.TITLE+; CHR(13) ENDS lcList=SUBSTR(lcList,1,LEN(lcList)-1) USE IN EMPLLIST RETURN lcList ENDFUNC ************************************************************ DEFINE CLASS WordReport AS CUSTOM ************************************************************ NAME = "WordReport" TemplateFile = '' ReportFile = '' PROTECTED WordApplication PROTECTED WordDocument REFERENCE = .F. PROCEDURE CREATE LOCAL loApp, loDoc loApp=THIS.WordApplication loDoc=THIS.WordDocument loDoc.SAVEAS(THIS.ReportFile) LOCAL lcFoundText, lcCommand loApp.SELECTION.FIND.Execute('\<*\>',,,.T.,,,.T.,1) lcFoundText=loApp.SELECTION.TEXT DO WHILE SUBSTR(lcFoundText,1,1)='<' AND ; SUBSTR(lcFoundText,LEN(lcFoundText),1)='>' lcCommand=loApp.SELECTION.TEXT lcCommand=SUBSTR(lcCommand,1,LEN(lcCommand)-1) lcCommand=SUBSTR(lcCommand,2) loApp.SELECTION.TEXT=EVALUATE(lcCommand) loApp.SELECTION.FIND.Execute('\><*\>',,,.T.,,,.T.,1) lcFoundText=loApp.SELECTION.TEXT ENDDO loDoc.SAVE() ENDPROC PROCEDURE SHOW LPARAMETERS nStyle LOCAL loApp loApp=THIS.WordApplication loApp.VISIBLE=.T. ENDPROC PROCEDURE HIDE LOCAL loApp loApp=THIS.WordApplication loApp.VISIBLE=.F. ENDPROC PROCEDURE PRINT LPARAMETERS cText LOCAL loApp loApp=THIS.WordApplication IF loApp.VISIBLE loApp.Dialogs(88).SHOW() ELSE THIS.SHOW() loApp.Dialogs(88).SHOW() THIS.HIDE() ENDIF ENDPROC PROCEDURE reference_access RETURN THIS.WordApplication ENDPROC PROCEDURE reference_assign LPARAMETERS vNewVal ENDPROC PROCEDURE INIT LPARAMETERS lcTempaleName, lcReportName THIS.TemplateFile=lcTempaleName THIS.ReportFile=lcReportName THIS.WordApplication=CREATEOBJECT('Word.Application') LOCAL loApp loApp=THIS.WordApplication THIS.WordDocument=loApp.Documents.OPEN(THIS.TemplateFile) ENDPROC PROCEDURE DESTROY LOCAL loApp loApp=THIS.WordApplication loApp.QUIT() ENDPROC ENDDEFINE