LOCAL loWord AS WORD.APPLICATION LOCAL loDoc AS WORD.DOCUMENT
loWord = CREATEOBJECT("Word.Application")
loWord.Documents.ADD(oAppInfo.GroupPlanTemplate) &&("GroupPlan.dot") m.loDoc = m.loWord.ActiveDocument
* Retrieve the number of bookmarks defined in DOC m.lnCountMarks = m.loDoc.Bookmarks.COUNT
* Store bookmarks in an array DIMENSION laMark[m.lnCountMarks]
FOR lnCount = 1 TO m.lnCountMarks laMark[lnCount] = m.loDoc.Bookmarks(lnCount).NAME ENDFOR
* Loop through all the bookmarks in the document FOR lnCount = 1 TO m.lnCountMarks m.lcMarkName = UPPER(laMark[lnCount])
WITH m.loDoc.Bookmarks(m.lcMarkName).RANGE
DO CASE
* Claims expense breakdown
CASE m.lcMarkName == UPPER("ClaimsExpense")
oRange = m.loDoc.Bookmarks(m.lcMarkName).RANGE
oTable = m.loDoc.Tables.Add( oRange, 1, 2)
oTable.BORDERS.InsideLineStyle = .F.
oTable.BORDERS.OutsideLineStyle = .F.
oTable.Cell[1,1].Range.Font.Bold = .T.
oTable.Cell[1,1].RANGE.InsertAfter("Expense Type")
oTable.Cell[1,1].RANGE.ParagraphFormat.ALIGNMENT = wdAlignParagraphLeft
oTable.Cell[1,2].Range.Font.Bold = .T.
oTable.Cell[1,2].RANGE.InsertAfter("Total Expense")
oTable.Cell[1,2].RANGE.ParagraphFormat.ALIGNMENT = wdAlignParagraphLeft
m.lnRow = 1
m.lnTotalExpense = 0
SELECT c_ExpenseBreakdown
SCAN
oTable.ROWS.ADD()
m.lnRow = m.lnRow + 1
oTable.Cell[m.lnRow,1].Range.Font.Bold = .F.
oTable.Cell[m.lnRow,1].RANGE.InsertAfter(c_ExpenseBreakdown.typ_name)
oTable.Cell[m.lnRow,2].Range.Font.Bold = .F.
oTable.Cell[m.lnRow,2].RANGE.InsertAfter(ALLTRIM(TRANSFORM(NVL(c_ExpenseBreakdown.ExpenseAmount, 0), "@R $$$,$$$,$$9.99")))
m.lnTotalExpense = m.lnTotalExpense + NVL(c_ExpenseBreakdown.ExpenseAmount, 0)
ENDSCAN
oTable.ROWS.ADD()
m.lnRow = m.lnRow + 1
oTable.Cell[m.lnRow,1].Range.Font.Bold = .T.
oTable.Cell[m.lnRow,1].RANGE.InsertAfter("TOTAL")
oTable.Cell[m.lnRow,2].Range.Font.Bold = .T.
oTable.Cell[m.lnRow,2].RANGE.InsertAfter(ALLTRIM(TRANSFORM(NVL(m.lnTotalExpense, 0), "@R $,$$$,$$9.99")))
ENDCASE
ENDWITH
ENDFOR
Frank.
Frank Cazabon
On 15/05/2019 05:04 PM, MB Software Solutions, LLC wrote:
How do you dynamically add the rows? Via Office Automation code? If so, care to share?
On 5/15/2019 4:54 PM, Frank Cazabon wrote:
I do stuff like that using Bookmarks in a Word template and automating their replacement.
Frank.
Frank Cazabon
On 15/05/2019 03:05 PM, MB Software Solutions, LLC wrote:
Screenshot of Word document in question (with notations for where content is dynamic; some parts blurred just to protect the players): https://www.screencast.com/t/vOJd9eBwPaX
Currently, my colleague did so many of these documents MANUALLY in Word. I'd pull my hair out if I had to do that, especially since I've got VFP. The trick here is to dynamically enter the names for each letter to an organization. Each organization can have 1:M names in this report.
The quick thought is a VFP FRX Report, using XFRX (or something else) to save the output to a Word document. And given that the text above the dynamic organization name and user names/emails part is static, I could do it. But like you've probably encountered before, I don't like to force the Line-breaks in the VFP Report Writer if I can avoid it (PITA).
So how would you produce these dynamic Word documents easily?
Flattened cursor for this would have this structure:
* OrgName * OrgID (e.g., P0135) * Name * Email * AcctType
That's it. User would select the Yes/No values and return to us. Task here is generated these 100 reports without having to manually do it (and obviously avoid the human error factor).
tia, --Mike
This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus
--- StripMime Report -- processed MIME parts --- multipart/alternative text/plain (text body -- kept) text/html
[excessive quoting removed by server]