Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
WordPerfect / Foxpro Merge
Message
De
25/09/1999 02:35:58
 
 
À
24/09/1999 17:59:47
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Divers
Thread ID:
00268820
Message ID:
00268900
Vues:
29
Hi Bill.

>> I am trying to use a simple VFP 6.0 table as a merge data source in Corel Wordperfect 8.0. This is, of course, ludicrously easy in Word, as the table can be directly attached. At least as it appears to me, this is not the case in WordPerfect. <<

You have my sympathy < g >.
I did this a while back and what I discovered is that even though Corel says you can do automation with Word Perfect, I never did get it to work reliably and had to go back to using DDE.

Just like in Word, you can record a macro in Word Perfect and then edit it to find out what synatx to use. But I'll help you out with some code:
LPARAMETERS tcFileName, llWPList, tcSaveName
LOCAL lnDDEChan, lcFormFile, lcDataFile, lcImportFile, LnLen, ;
	lcTextFile, lcMacroName, lni, llChannelClosed, lcNewFile

lcNewFile = ""
lnDDEChan = THISFORM.OpenDDEChannel("WPWin")
IF lnDDEChan = -1
  =MESSAGEBOX('Cannot Link with Word Perfect', 16)
  RETURN
ENDIF

lcFormFile   = ALLTRIM(THISFORM.cWpDocsLoc) + tcFileName + ".FRM"
lcImportFile = ALLTRIM(THISFORM.cDataLoc) + tcFileName + ".DBF"
lcDataFile   = STRTRAN(lcFormFile, ".FRM", ".DAT")
lcTextFile   = ALLTRIM(THISFORM.cWpDocsLoc) + tcSaveName + ".WPD"
lcMacroName = STRTRAN(lcFormFile,".FRM",".WCM")

IF FILE(lcDataFile)
  ERASE (lcDataFile)
ENDIF
IF FILE(lcTextFile)
  ERASE (lcTextFile)
ENDIF
*
*  Run the Merge in WordPerfect
*
IF ALLTRIM(THISFORM.cWordPerfectVersion) = "8"
  lcCmd = "Application (WordPerfect; "+CHR(34)+"WordPerfect"+CHR(34)+"; Default!;" + ;
  CHR(34) + "EN" + CHR(34) + ")"
ELSE
  lcCmd = "Application (WordPerfect; "+CHR(34)+"WordPerfect"+CHR(34)+"; Default; " + ;
  CHR(34) + "US" +CHR(34) + ")"
ENDIF
DDEEXECUTE(lnDDEChan, lcCmd)
IF THISFORM.cWordPerfectVersion = "6.0"
   DDEEXECUTE(lnDDEChan, "AppRestore ()")		&& restore wordperfect to display
ENDIF
IF ALLTRIM(THISFORM.cWordPerfectVersion) <> "8"
  DDEEXECUTE(lnDDEChan, "ViewDraft ()")
ENDIF

* set the import file name
lcCmd = "ImportSetFileName (Filename: " + CHR(34) + lcImportFile + CHR(34) + ")"
DDEEXECUTE(lnDDEChan, lcCmd)

* run the macro to create the appropriate .DAT file
lcCmd = "MacroFilePlay (Filename: " + CHR(34) + lcMacroName + CHR(34) + ")"
DDEEXECUTE(lnDDEChan, lcCmd)
=INKEY(THISFORM.nMacroDelay)

IF ALLTRIM(THISFORM.cWordPerfectVersion) = "8"
  lcCmd = "FileSave (Filename: " + CHR(34) + lcDataFile + CHR(34) + ;
  "; ExportType: WordPerfect_6_7_8!)"
ELSE
  lcCmd = "FileSave (Filename: " + CHR(34) + lcDataFile + CHR(34) + ;
	"; ExportType: WordPerfect_60!)"
ENDIF
* Since we erased the datafile at the beginning of this routine, just send the save command
* until the file exists. We counld have also chacked for DDELastError() <> 0 (Service busy), but
* sometimes the commands fall thru and DDELastError returns 0. This should work. 
* save the imported .DAT file
DO WHILE !FILE(lcDataFile)
  DDEEXECUTE(lnDDEChan, lcCmd)
  =INKEY(THISFORM.nFileSaveDelay)		&& give it a chance to save the file
ENDDO	
DDEEXECUTE(lnDDEChan, "Close (Save: No!)")		&& close the open file
=INKEY(.2)
DO WHILE DDELastError() <> 0
   DDEEXECUTE(lnDDEChan, "Close (Save: No!)")		&& close the opened .Dat file
   =INKEY(.2)
ENDDO

* open the appropriate .FRM file
lcCmd = "FileOpen (Filename: " + CHR(34) + lcFormFile + CHR(34) + ")"
DDEEXECUTE(lnDDEChan, lcCmd)

* set up for the merge

DDEEXECUTE(lnDDEChan, "MergeSelect (SelectType: All!)")
IF llWPList
   lcCmd = "MergePageBreak (State: Off!)"
ELSE
   lcCmd = "MergePageBreak (State: ON!)"
ENDIF
DDEEXECUTE(lnDDEChan, lcCmd)
=INKEY(THISFORM.nFileSaveDelay)
DO WHILE DDELastError() <> 0
   DDEEXECUTE(lnDDEChan, lcCmd)
   =INKEY(THISFORM.nFileSaveDelay)
ENDDO
* run the merge
lcCmd = "MergeRun (FormFileType: Current!; DataFileType: DataFile!; DataFile: "
lcCmd = lcCmd + CHR(34) + lcDataFile + CHR(34) + "; OutputFileType: ToFile!; OutputFile: "
lcCmd = lcCmd + CHR(34) + lcTextFile + CHR(34) + ")"
DDEEXECUTE(lnDDEChan, lcCmd)
* WE CAN PROBABLY JUST CHECK FOR THE EXISTENCE OF THE .WPD SINCE WE DELETED IT AT THE START OF
* THIS ROUTINE
DO WHILE !FILE(lcTextFile)
   =INKEY(THISFORM.nFileSaveDelay)	&& make the wait loop a bit less tight
ENDDO

DDEEXECUTE(lnDDEChan, "Close (Save: No!)")		&& close the opened .FRM file
=INKEY(.2)
DO WHILE DDELastError() <> 0
   DDEEXECUTE(lnDDEChan, "Close (Save: No!)")		&& close the opened .FRM file
   =INKEY(.2)
ENDDO

IF THISFORM.cWordPerfectVersion = "6.0"
  DDEEXECUTE(lnDDEChan, "AppMinimize ()")		&& minimize wordperfect
ENDIF	
=INKEY(.2)

llChannelClosed = DDETERMINATE(lnDDEChan)		&& terminate the DDE connection
DO WHILE !llChannelClosed
  llChannelClosed = DDETERMINATE(lnDDEChan)
ENDDO

RETURN
Marcia
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform