>>>#include "wdconst.h" >>>#Define NL Chr(13) >>>#Define TABULATE Chr(9) >>>Select first_name,last_name,notes ; >>> from (_samples+'data\employee') ; >>> where Title = 'Sales' ; >>> into Cursor Tempreport >>>lnFields = _CopyDataToClipBoard('TempReport') >>>Use In 'TempReport' >>> >>>lcSourceDoc = Sys(5)+Curdir()+'Source.doc' >>> >>>*** set the LOCALEID to English >>>nlLocaleId=Sys(3004) && Save local id >>>=Sys(3006,1033) && sending instructions in English >>>*** set the LOCALEID to English >>> >>>Local oWordDocument >>>oWord=Createobject("word.application") && Create word object >>>With oWord >>> .documents.Add && New file or open a template >>> With .ActiveDocument >>> .Range.Paste >>> .Range.ConvertToTable(wdSeparateByTabs) >>> .Range.Find.Execute("~",,,,,,,,,Chr(13),wdReplaceAll) && Restore memo para marks >>> .SaveAs(lcSourceDoc) >>> .Close(wdSaveChanges) && Close saving >>> EndWith >>> _cliptext = "" >>> >>> .documents.Add >>> With .ActiveDocument.Mailmerge >>> .OpenDataSource(m.lcSourceDoc) && Set file as data source for mailmerge >>> .EditMainDocument && Activate the main document >>> >>> * Write mailmerge text thinking not using a template >>> .Application.Selection.TypeText("Dear,"+Chr(13)) >>> With .Application.Selection.Font >>> .Name = 'Times New Roman' >>> .Italic = .T. >>> .Size = 14 >>> Endwith >>> .Fields.Add(.Application.Selection.Range, 'First_Name') >>> .Application.Selection.TypeText(',') >>> .Fields.Add(.Application.Selection.Range, 'Last_Name') >>> With .Application.Selection.Font >>> .Name = 'Times New Roman' >>> .Italic = .F. >>> .Size = 10 >>> Endwith >>> .Application.Selection.TypeText(NL+NL+'Please update your info and send back. Current notes are as follows:'+NL+NL) >>> With .Application.Selection.Font >>> .Name = 'Arial' >>> .Size = 12 >>> .Color = Rgb(0,0,255) >>> Endwith >>> .Fields.Add(.Application.Selection.Range, 'Notes') >>> >>> * Send to a new doc - to check what we get >>> .Destination = wdSendToNewDocument >>> .Execute >>> >>> Endwith >>> .Visible = .T. && Show word app >>> .Activate && Make it the active foreground app >>>*!* m.lcPageList = "3,6-7" >>>*!* .ActiveDocument.Printout(.t.,,wdPrintRangeOfPages,,,,,1,m.lcPageList) >>>Endwith >>> >>>**** Set the LocaleId to the previous value >>>=Sys(3006,Val(nlLocaleId)) >>> >>>******************************************************************* >>>* Insert a table in Word - NonODBC safe way >>>******************************************************************* >>>Function _CopyDataToClipBoard >>> Lparameters tcCursorName >>> >>> lcOldAlias = Alias() && Save alias >>> Select (m.tcCursorName) >>> lnFields = Fcount() >>> lcTempFileName = "X"+Sys(2015)+".tmp" >>> handle = Fcreate(lcTempFileName) && Create a temp file >>>&& Write header line >>> For ix = 1 To lnFields >>> =Fwrite(handle, Field(ix)) >>> If ix < lnFields >>> =Fwrite(handle, TABULATE) >>> Endif >>> Endfor >>> =Fwrite(handle, NL) >>> Scan && Start scan..endscan >>> For ix = 1 To lnFields >>> =Fwrite(handle, TypeConvert(ix) ) >>> If ix < lnFields >>> =Fwrite(handle, TABULATE) >>> Endif >>> Endfor >>> =Fwrite(handle, NL) >>> Endscan >>> lnSize=Fseek(handle,0,2) >>> =Fseek(handle,0,0) >>> _Cliptext = Fread(handle, lnSize) && Read file to clipboard >>> =Fclose(handle) >>> Erase (lcTempFileName) >>> * Prepare text copied to clipboard in VFP which is much faster than Word OLE >>> If !Empty(lcOldAlias) >>> Select (lcOldAlias) >>> Endif >>> Return lnFields >>> >>>Function TypeConvert >>> Lparameters tnField >>> lcType = Type(Field(ix)) >>> If lcType = 'G' >>> Return '' >>> Endif >>> luValue = Eval(Field(ix)) >>> Do Case >>> Case lcType = "D" >>> lcValue = Dtoc(luValue) >>> Case lcType = "T" >>> lcValue = Ttoc(luValue) >>> Case lcType = "N" >>> lcValue = Padl(luValue,20," ") >>> Case lcType = "L" >>> lcValue = Iif(luValue,"Yes","No") >>> Case lcType $ "M" && Replace paragraph marks with "~" >>> lcValue = Strtran(luValue, Chr(13)+Chr(10), "~") >>> Case lcType $ "C" >>> lcValue = luValue >>> Otherwise >>> lcValue = "" >>> Endcase >>> Return Alltrim(lcValue) >>>Cetin