>>#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