DEFINE VARIABLE hTempTable AS HANDLE NO-UNDO.
DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
DEFINE VARIABLE hQry AS HANDLE NO-UNDO.
DEFINE VARIABLE hBufFld AS HANDLE NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DEFINE VARIABLE ii AS INTEGER NO-UNDO.
DEFINE VARIABLE hExcel AS COM-HANDLE.
DEFINE VARIABLE hws AS COM-HANDLE.
DEFINE VARIABLE hwb AS COM-HANDLE.
DEFINE VARIABLE hrange AS COM-HANDLE.
DEFINE VARIABLE rownum AS INT. 
DEFINE VARIABLE crownum AS CHARACTER.
DEFINE VARIABLE alpha AS CHARACTER INIT "abcdefghijklmnopqrstuvwxyz".
DEFINE VARIABLE v-column AS CHARACTER.
DEFINE VARIABLE crange AS CHARACTER.

CREATE "Excel.Application" hExcel.

IF NOT VALID-HANDLE(hExcel) THEN RETURN.

/* Use FALSE if you don't want to seen excel work */
hExcel:Visible = TRUE.

hwb = hExcel:WorkBooks:ADD.
hws = hwb:worksheets:ADD.
    
RUN get_tt.p 
            (INPUT "order",
              INPUT 'ar-entity = "be"',
              INPUT "",
              INPUT 1,
              INPUT 1,
              OUTPUT TABLE-HANDLE hTempTable) NO-ERROR.

IF ERROR-STATUS:ERROR THEN
DO:
    IF RETURN-VALUE <> "" THEN
        MESSAGE RETURN-VALUE VIEW-AS ALERT-BOX.
    ELSE
        MESSAGE ERROR-STATUS:GET-MESSAGE(1).
END.

IF hTempTable = ? THEN
DO :
    MESSAGE "No TEMP-TABLE returned" VIEW-AS ALERT-BOX.
    RETURN.
END.

hBuffer = hTempTable:DEFAULT-BUFFER-HANDLE.

CREATE QUERY hQry.
hQry:SET-BUFFERS(hBuffer).

hQry:QUERY-PREPARE("FOR EACH " + hBuffer:NAME + " NO-LOCK").
hQry:QUERY-OPEN().

REPEAT:
    /*repeat first row to field labels on first pass*/
    IF rownum NE 1 THEN 
        hQry:GET-NEXT().
    IF hQry:QUERY-OFF-END THEN
        LEAVE.
    REPEAT i = 1 TO hBuffer:NUM-FIELDS:
        /*Get Excel column label*/
        IF i > 26 THEN DO:
            v-column = substring(alpha,(ii),1). 
            IF  i - (26 * ii) > 0 THEN
                v-column = v-column + substring(alpha,(i - (26 * ii)),1).
            ELSE
                v-column = v-column + "z".
        END.
        ELSE 
            v-column = substring(alpha,i,1).
        
        ii = TRUNCATE((i / 26),0).
        /*Populate the Speadsheet*/
        hBufFld = hBuffer:BUFFER-FIELD(i).
        ASSIGN 
            crownum = STRING(rownum + 1)
            crange = v-column + crownum
            hws:range(crange):VALUE = 
            (IF rownum = 0 THEN hBufFld:NAME
                ELSE hBufFld:STRING-VALUE).
    END.
    rownum = rownum + 1.
END.
/*delete rec-id from Column A*/
hws:Range("A1"):Select.
hexcel:Selection:EntireColumn:Delete.
/*Leave the spreadsheet open on the users desktop.
hwb:CLOSE.
hexcel:QUIT.
*/
RELEASE OBJECT hws.
RELEASE OBJECT hwb.
RELEASE OBJECT hExcel.


/* The select method set's the selection in the application object, so get
it from there  
    hws:Range("A12:C20"):Select.
    hexcel:Selection:Interior:ColorIndex = 15.
    hexcel:Selection:Interior:Pattern = 1.
    hexcel:Selection:Interior:PatternColorIndex = -4105.

 ASSIGN
    crange = "d" + STRING(rownum + 2)
    hws:range(crange):VALUE = "Order Total"
    hws:cells(rownum + 2, 5):formula =
        "=sum(e2:e" + STRING(rownum - 1) + ")"
    hws:range(crange):borders(7):weight = 3
    hws:range(crange):borders(10):weight = 3
    crange = "e1:e" + STRING(rownum + 3)
    hws:range(crange):borders(10):weight = 3
    crange = "a" + STRING(rownum + 3) + ":e" + STRING(rownum + 3)
    hws:range(crange):borders(9):weight = 3
    ws:pagesetup:leftmargin = hexcel:inchestopoints(0.5)
    hws:pagesetup:rightmargin = hexcel:inchestopoints(0.5).

    
*/
