oWordDocument = createobject("Word.Application") >>with oWordDocument >> .Documents.Add("c:\mypath\mysavedtemplate.doc") && New file with a template >> with .Activedocument >> _SetVar("cFirst_Name", myTable.First_name) >> _SetVar("cLast_Name", myTable.Last_name) >>*... >> endwith >>*... >> .Visible = .t. && Show word >>endwith >> >> >>FUNCTION _SetVar >>LPARAMETERS tcVarName, tcVarValue >> .Variables(tcVarName).value = iif(empty(tcVarValue)," ",tcVarValue)This works pretty well for one record templates (or Parent table data).
>strSubject = "Quotation No.: "+ALLTRIM(QTHD.QUOTENO) > >theApp = CreateObject("Outlook.Application") >theNameSpace = theApp.GetNameSpace("MAPI") >*theNameSpace.Logon(strProfile , strPassword) >theMailItem = theApp.CreateItem(0) > >*theMailItem.Recipients.Add( strRecipient ) >theMailItem.Subject = strSubject >theMailItem.Body = test() >*theMailItem.Font.name = "Fixedsys" >theMailItem.display >theNameSpace.Logoff > >FUNCTION test >REQUERY("QUOTEVW") >m.Description = "Requested By:"+SPACE(2)+ALLTRIM(QTHD.REQUESTED_)+CHR(13)+; > "Inquiry No.:"+SPACE(2)+ALLTRIM(QTHD.INQUIRY_NO)+CHR(13)+; > "Inquiry Date:"+SPACE(2)+DTOC(QTHD.INQUIRY_DA)+CHR(13)+; > "Date:"+SPACE(2)+DTOC(QTHD.DATE)+CHR(13)+; > "Estimated Delivery:"+SPACE(2)+ALLTRIM(QTHD.ESTIMATED_)+CHR(13)+; > "Terms:"+SPACE(2)+ALLTRIM(QTHD.TERMS)+CHR(13)+; > "Salesman:"+SPACE(2)+ALLTRIM(QTHD.SALESMAN)+CHR(13)+CHR(13)+CHR(13)+; > "Quantity"+SPACE(20)+"Description"+SPACE(20)+; > "Umeas"+SPACE(10)+"Amount"+CHR(13) > SELECT QUOTEVW > FOR I = 1 TO RECCOUNT() > GO RECORD I > m.description = m.description+STR(QUOTEVW.QUANTITY)+; > SPACE(2)+QUOTEVW.DESCRIPTION+SPACE(2)+QUOTEVW.UMEAS+; > SPACE(2)+STR(QUOTEVW.AMOUNT,10,2)+CHR(13) > ENDFOR > m.Description = m.Description+CHR(13)+CHR(13)+CHR(13) > m.Description = m.Description+QTHD.OTHER_INFO > RETURN m.Description >ENDFUNC >>As you can see I can have a lot of items or just one. Got any Ideas?
SELECT QUOTEVW #define TABULATE chr(9) #define NL chr(13) m.description = "Quantity"+TABULATE+"Description"+TABULATE+; "Umeas"+TABULATE+"Amount"+NL scan m.description = m.description+padl(QUOTEVW.QUANTITY,len("Quantity")," ")+; TABULATE+QUOTEVW.DESCRIPTION+TABULATE+QUOTEVW.UMEAS+; TABULATE+STR(QUOTEVW.AMOUNT,10,2) if !eof() m.description = m.description+NL && New row endif ENDscan _ClipText = m.description *You would go to bookmark in word and : WITH toWord.ActiveDocument .Bookmarks(tcBookmarkName).Select WITH .Application.Selection .Collapse(wdCollapseEnd) && Go to end of bookmark IF .Information(wdWithInTable) && If we're in a table .MoveEnd(wdTable) .Collapse(wdCollapseEnd) && Get out of table .InsertParagraph() && Split table .Collapse(wdCollapseEnd) && Clear selection ENDIF .Text = _cliptext && Paste clip data lnWidth = tnPageColWidth / fcount() && Calculate evenly distributed width * Convert to table format Colorful 2 loTable = .ConvertToTable(wdSeparateByTabs,,lnHeaders,lnWidth, ; wdTableFormatColorful2,,,,,,,.f.,,.f.) .Find.Execute("~",,,,,,,,,chr(13),wdReplaceAll) && Restore memo para marks * Do not let row break if doesn't fit on same page .Rows.AllowBreakAcrossPages = .f. .Collapse(wdCollapseEnd) ENDWITH ENDWITH = _FormatTable(toWord, loTable, tcBookmarkName, @taFieldAndCaptionNames)Then insert few para marks + other info. That's it.