#include wdconst.h #Define CHR_TAB chr(9) #Define CHR_CR chr(13) Local loWord, lcMyTable lcMyTable1 = "Parameters" + CHR_TAB + "Limit" + CHR_TAB + "Average" + CHR_CR ; + "Chlorine" + CHR_TAB + "13.5" + CHR_TAB + "10" + CHR_CR ; + "Boron" + CHR_TAB + "55.8" + CHR_TAB + "45" + CHR_CR lcTempFile = sys(2015)+'.tmp' Use employee Copy fields First_name, last_name, Title ; to (lcTempFile) type delimited with TAB lcMyHeader = chrtran('First Name,Last Name,Job Title',',',chr(9))+chr(13)+chr(10) lcMyTable2=lcMyHeader+ChrTran(FileToStr(lcTempFile),'"','') Erase (lcTempFile) loWord = newobject('word.application') With loWord .Documents.Add() With .Selection .EndKey(wdStory) .InsertParagraphAfter() Endwith .ActiveDocument.Bookmarks.Add('StringTable') && Bookmark table positions With .Selection .EndKey(wdStory) .InsertParagraphAfter() Endwith .ActiveDocument.Bookmarks.Add('EmployeeTable') PutWordTable(loWord,lcMyTable2, 'EmployeeTable') && Add in reverse order - using bookmarks PutWordTable(loWord,lcMyTable1, 'StringTable') Clear ListTable2VFP(.ActiveDocument.Tables(1)) ListTable2VFP(.ActiveDocument.Tables(2)) .Visible = .t. Endwith Function ListTable2VFP Lparameters toTable With toTable For ix = 1 to .Rows.Count ? For jx = 1 to .Columns.Count lcCellText = chrtran( .Rows(ix).Cells(jx).Range.Text , chr(13)+chr(10)+chr(2)+chr(7), '' ) ?? padr(lcCellText, 30) + '| ' Endfor Endfor ? ? Endwith Function PutWordTable Lparameters toWord, tcTable, tcBookmarkName 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 = tcTable loTable = .ConvertToTable(wdSeparateByTabs,,,,wdTableFormatColorful2,.f.,,,,,,.f.,,.f.) .Collapse(wdCollapseEnd) Endwith EndwithCetin