Sometime client needed report to be generated into excel sheet. we can create excel report using PeopleCode and using SQR both.
But there is a limitation to generate excel report using PeopleCode is that, it calls COM objects for Excel.Application which can be used in Window server only where code will get execute. so if user want to generate Excel report using PeopleCode (Including this PeopleCode in Application Engine) then that process needs to be run in NT server only.
Whereas if we will create excel report using SQR it can be executed in any server.
PeopleSoft already provides various procedures which can be used while generating excel using SQR. i have incorporated those procedures in SQC "ExclWrite.SQC" (Find below Code for this SQC) which have been used in the sample excel file generation SQR Report "EXCLFILE.SQR" (Find below Code for this SQR) .
This topic might help people who are going to write excel file using SQR first time. all the procedures i have included in the SQC file are provided by PeopleSoft only, i have just created new SQC and attached here for better understanding and use of each procedures.
1) ExclWrite.SQC
! xml_cell_char($character, #column_adjust, #style_id)
! xml_cell_comment($Author,$Font,$Comment)
! xml_cell_datetime($datetime, #column_adjust, #style_id,#MergeAcross)
! xml_cell_formula($formula, #column_adjust, #style_id,#MergeAcross)
! xml_cell_number(#number, $edit, #column_adjust, #style_id,#MergeAcross)
! xml_cell_premovement(#column_adjust, #style_id, #mergeacross, :$xml_cell_pre_attr, :$xml_cell_post_attr)
! xml_character_cleaner($character, :$character)
! xml_closing_cell()
! xml_closing_row()
! xml_closing_table()
! xml_closing_worksheet()
! xml_closing_worksheetoptions()
! xml_finalize_autofilter()
! xml_finalize_pagebreak()
! xml_finalize_style()
! xml_finalize_validationlist($Range,$Type,$List,$InputTitle,$InputMessage)
! xml_finalize_workbook()
! xml_finalize_worksheet_allowoptions($Allow_Options)
! xml_finalize_worksheet_pagesetup($Orientation, $Center_Options, #Margin_Top, #Margin_Right, #Margin_Bottom, #Margin_Left, $Header, $Footer)
! xml_finalize_worksheet_print(#FitWidth, #FitHeight, #Scale, #PageBreakZoom)
! xml_finalize_worksheet_split(#SplitHorizontal, #SplitVertical, #Freeze)
! xml_init_col(#column, #autofitwidth, #width, #hidden, #style_id, #Span)
! xml_init_environment()
! xml_init_file(#File, $file, #ProtectStructure, #ProtectWindows, $Encoding_F)
! xml_init_row(#row_adjust, #autofitheight, #height, #hidden, #style_id)
! xml_init_style(#style_id)
! xml_init_worksheet($worksheet_name, #Protected, #NameRangesAreComing)
! xml_pagebreak()
! xml_style_alignment($Horizontal, $Vertical, #ShrinkToFit, #WrapText)
! xml_style_border($Position, $LineStyle, #Weight)
! xml_style_border_end()
! xml_style_font($FontName, #Size, #Bold_andor_Italics)
! xml_style_interior($Color, $Pattern)
! xml_style_numberformat($Format)
! xml_style_protection(#Protected, #Hideformula)
! xml_style_protection(#Protected, #Hideformula)
!***********************************************************************
! Procedure: xml_init_environment
! Purpose : Initialization for the xml file writing to generate excel file
!***********************************************************************
begin-procedure xml_init_environment()
Create-Array Name=XML_Memory_Global Size=99999 !#i = File Number
Field=Worksheet:Number=1
Field=Column:Number=1
Field=Row:Number=1
Field=Filename:Char
Field=Worksheet1_Name:Char
Create-Array Name=XML_PageBreak Size=99999
Field=Row:Number=1
end-procedure
!***********************************************************************
! Procedure: xml_init_row
! Purpose : Initialization of row where data will be written
!***********************************************************************
begin-procedure xml_init_row(#row_adjust, #autofitheight, #height, #hidden, #style_id)
do xml_closing_row()
let $xml_row_index = ''
let $xml_autofit = ''
let $xml_height = ''
let $xml_hidden = ''
let $xml_style = ''
!If the Row needs adjusting (or this is our first row...
! Check to see if this we've ever written a before
! if so, write the
! Now write the new
|
! Set the #_xml_first_row to false
if #row_adjust or #_xml_first_row
add 1 to #_xml_current_row
if #row_adjust > 1
let #_xml_current_row = #_xml_current_row + #row_adjust - 1
let $xml_row_index = ' ss:Index="' || rtrim(ltrim(edit(#_xml_current_row,'9999999'),' '),' ') || '"'
end-if
if #autofitheight > 0
let $xml_autofit = ' ss:AutoFitHeight="1"'
end-if
if #height > 0
let $xml_height = ' ss:Height="' || rtrim(ltrim(edit(#height,'9999999.99'),' '),' ') || '"'
end-if
if #hidden > 0
let $xml_hidden = ' ss:Hidden="1"'
end-if
if #style_id > 0
let $xml_style = ' ss:StyleID="s' || rtrim(ltrim(edit(#style_id, '99999'),' '),' ') || '"'
end-if
let #_XML_Close_Row = 1
write #_XML_File_Number from '
'
let #_xml_current_col = 0
let #_xml_first_row = 0
end-if
end-procedure
!***********************************************************************
! Procedure: xml_closing_row
! Purpose : To close row where current data is being written
!***********************************************************************
begin-procedure xml_closing_row()
do xml_closing_cell()
if #_XML_Close_Row
write #_XML_File_Number from '
' let #_XML_Close_Row = 0
end-if
end-procedure
!***********************************************************************
! Procedure: xml_closing_cell
! Purpose : To close cell where current data is being written
!***********************************************************************
begin-procedure xml_closing_cell()
if #_XML_Close_cell
write #_XML_File_Number from '
' let #_XML_Close_Cell = 0
end-if
end-procedure
!***********************************************************************
! Procedure: xml_init_file
! Purpose : Open xml file for writing
!***********************************************************************
begin-procedure xml_init_file(#File, $file, #ProtectStructure, #ProtectWindows, $Encoding_F)
! Open XML file.
let #_XML_File_Number = #File
open $file as #_XML_File_Number For-Writing Record=10000 Status=#FileStatus Encoding = $Encoding_F
!Write Preliminary Stuff
Let $First_line_F = ''
write #_XML_File_Number from $First_line_F
write #_XML_File_Number from ''
write #_XML_File_Number from '
write #_XML_File_Number from ' xmlns:o="urn:schemas-microsoft-com:office:office"'
write #_XML_File_Number from ' xmlns:x="urn:schemas-microsoft-com:office:excel"'
write #_XML_File_Number from ' xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"'
write #_XML_File_Number from ' xmlns:html="http://www.w3.org/TR/REC-html40">'
!Hardcode in defaults for now
write #_XML_File_Number from ' '
write #_XML_File_Number from ' 8700'
write #_XML_File_Number from ' 11355'
write #_XML_File_Number from ' 120'
write #_XML_File_Number from ' 60'
write #_XML_File_Number from ' 815'
if #ProtectStructure = 0
write #_XML_File_Number from ' False'
else
write #_XML_File_Number from ' True'
end-if
if #ProtectWindows = 0
write #_XML_File_Number from ' False'
else
write #_XML_File_Number from ' True'
end-if
write #_XML_File_Number from '
'
let #_xml_first_style = 1 !Set this to True, until the first '
else
write #_XML_File_Number from '
'
let #_xml_first_style = 0
end-if
write #_XML_File_Number from ' '
write #_XML_File_Number from '
' end-if
end-procedure
!***********************************************************************
! Procedure: xml_finalize_worksheet_pagesetup
! Purpose : use to finalize worksheet page
!***********************************************************************
begin-procedure xml_finalize_worksheet_pagesetup($Orientation, $Center_Options, #Margin_Top, #Margin_Right, #Margin_Bottom, #Margin_Left, $Header, $Footer)
do xml_closing_table()
if substr($Orientation, 1, 1) = 'L' or substr($Orientation, 1, 1) = 'l'
let $XML_Orientation = ' x:Orientation="Landscape"'
else
let $XML_Orientation = ''
end-if
let #loc = 0
find 'H' in $Center_Options 0 #loc
if #loc <> -1
let $XML_CenterHor = ' x:CenterHorizontal="1"'
else
let $XML_CenterHor = ''
end-if
let #loc = 0
find 'V' in $Center_Options 0 #loc
if #loc <> -1
let $XML_CenterVer = ' x:CenterVertical="1"'
else
let $XML_CenterVer = ''
end-if
let $M1 = rtrim(ltrim(rtrim(edit(#Margin_Bottom,'99.9999'), ' '), ' '), '0')
let $M2 = rtrim(ltrim(rtrim(edit(#Margin_Left ,'99.9999'), ' '), ' '), '0')
let $M3 = rtrim(ltrim(rtrim(edit(#Margin_Right ,'99.9999'), ' '), ' '), '0')
let $M4 = rtrim(ltrim(rtrim(edit(#Margin_Top ,'99.9999'), ' '), ' '), '0')
write #_XML_File_Number from '
'
write #_XML_File_Number from '
'
If $Header <> ''
write #_XML_File_Number from '
End-If
If $Footer <> ''
write #_XML_File_Number from '
End-If
write #_XML_File_Number from '
'
write #_XML_File_Number from '
'
end-procedure
!***********************************************************************
! Procedure: xml_finalize_worksheet_print
! Purpose : use to finalize worksheet print
!***********************************************************************
begin-procedure xml_finalize_worksheet_print(#FitWidth, #FitHeight, #Scale, #PageBreakZoom)
do xml_closing_table()
if #Scale > 0
let $XML_Scale = ltrim(rtrim(edit(#scale, '9999'), ' '), ' ')
else
let $XML_Scale = '100'
end-if
if #PageBreakZoom > 0
let $XML_PBZoom = ltrim(rtrim(edit(#PageBreakZoom, '9999'), ' '), ' ')
else
let $XML_PBZoom = '100'
end-if
If #FitWidth > 0 Or #FitHeight > 0
If #Scale = 0
write #_XML_File_Number from '
'
End-If
End-If
write #_XML_File_Number from '
'
if #FitWidth > 0
let $FitWidth = ltrim(rtrim(edit(#FitWidth, '999999'), ' '), ' ')
write #_XML_File_Number from '
' $FitWidth ''
end-if
if #FitHeight > 0
let $FitHeight = ltrim(rtrim(edit(#FitHeight, '999999'), ' '), ' ')
write #_XML_File_Number from '
' $FitHeight ''
end-if
write #_XML_File_Number from '
'
write #_XML_File_Number from '
' $XML_Scale ''
write #_XML_File_Number from '
600'
write #_XML_File_Number from '
600'
write #_XML_File_Number from '
' write #_XML_File_Number from '
' $XML_PBZoom ''
write #_XML_File_Number from '
' $XML_PBZoom ''
write #_XML_File_Number from '
'
! if #ProtectObjects > 0
! write #_XML_File_Number from '
False'
! else
! write #_XML_File_Number from '
True'
! end-if
! if #ProtectScenarios > 0
! write #_XML_File_Number from '
False'
! else
! write #_XML_File_Number from '
True'
! end-if
end-procedure
!***********************************************************************
! Procedure: xml_finalize_worksheet_split
! Purpose : use to finalize worksheet split
!***********************************************************************
begin-procedure xml_finalize_worksheet_split(#SplitHorizontal, #SplitVertical, #Freeze)
do xml_closing_table()
if #Freeze
write #_XML_File_Number from '
'
end-if
if #SplitHorizontal > 0
let $SplitHorizontalData = ltrim(rtrim(edit(#SplitHorizontal, '9999999999'), ' '),' ')
let $TopRowBottomPaneData = ltrim(rtrim(edit(1, '9999999999'), ' '),' ')
write #_XML_File_Number from '
' $SplitHorizontalData ''
write #_XML_File_Number from '
' $TopRowBottomPaneData ''
end-if
if #SplitVertical > 0
let $SplitVerticalData = ltrim(rtrim(edit(#SplitVertical, '9999999999'), ' '),' ')
let $LeftColumnRightPaneData = ltrim(rtrim(edit(1, '9999999999'), ' '),' ')
write #_XML_File_Number from '
' $SplitVerticalData ''
write #_XML_File_Number from '
' $LeftColumnRightPaneData ''
end-if
if #SplitHorizontal or #SplitVertical
if #SplitHorizontal and #SplitVertical
write #_XML_File_Number from '
0'
else
if #SplitVertical
write #_XML_File_Number from '
1'
else
write #_XML_File_Number from '
2'
end-if
end-if
else
write #_XML_File_Number from '
3'
end-if
if #SplitHorizontal or #SplitVertical
write #_XML_File_Number from '
'
write #_XML_File_Number from '
'
write #_XML_File_Number from '
3'
write #_XML_File_Number from '
' end-if
if #SplitVertical
write #_XML_File_Number from '
'
write #_XML_File_Number from '
1'
write #_XML_File_Number from '
' end-if
if #SplitHorizontal
write #_XML_File_Number from '
'
write #_XML_File_Number from '
2'
write #_XML_File_Number from '
' end-if
if #SplitHorizontal and #SplitVertical
write #_XML_File_Number from '
'
write #_XML_File_Number from '
0'
write #_XML_File_Number from '
' end-if
if #SplitHorizontal or #SplitVertical
write #_XML_File_Number from '
' end-if
end-procedure
!***********************************************************************
! Procedure: xml_finalize_worksheet_allowoptions
! Purpose : use to finalize worksheet options
!***********************************************************************
begin-procedure xml_finalize_worksheet_allowoptions($Allow_Options)
do xml_closing_table()
let $Allow_Options = rtrim(ltrim($Allow_Options,' '),' ')
if $Allow_Options <> ''
let #start = 1
let #location = 0
while #location <> -1
let #start = #location + 1
Find '^' In $Allow_Options #start #location
if #location = -1
let #size = (length($Allow_Options) - #start) + 1
else
let #size = (#location - #start) + 1
end-if
let $Data = ltrim(rtrim(substr($Allow_Options,#start,#size),'^'),'^')
write #_XML_File_Number from '
'
end-while
end-if
do xml_finalize_pagebreak()
do xml_finalize_autofilter()
end-procedure
!***********************************************************************
! Procedure: xml_finalize_pagebreak
! Purpose : use to finalize page break
!***********************************************************************
begin-procedure xml_finalize_pagebreak()
!Developer doesn't need to call this function.
!Procedure changed to reset #_xml_pagebreak_entry back to zero near the end
! Change was for version 1.02
do xml_closing_worksheetoptions()
!PageBreak Logic
if #_xml_pagebreak_entry > 0
write #_XML_File_Number from '
'
write #_XML_File_Number from '
'
let #i = 0
while #i < #_xml_pagebreak_entry
get #k from XML_PageBreak(#i) Row
let $k = rtrim(ltrim(edit(#k, '9999999'),' '),' ')
write #_XML_File_Number from '
' $k '
'
add 1 to #i
end-while
write #_XML_File_Number from '
' write #_XML_File_Number from '
' let #_xml_pagebreak_entry = 0 !Added April 28, 2005 for Version 1.02
end-if
end-procedure
!***********************************************************************
! Procedure: xml_finalize_validationlist
! Purpose : use to finalize validation list
!***********************************************************************
begin-procedure xml_finalize_validationlist($Range,$Type,$List,$InputTitle,$InputMessage)
do xml_closing_worksheetoptions()
write #_XML_File_Number from '
'
write #_XML_File_Number from '
' $Range ''
write #_XML_File_Number from '
' $Type ''
write #_XML_File_Number from '
'
write #_XML_File_Number from '
"' $List '"'
if $InputTitle <> ''
write #_XML_File_Number from '
' $InputTitle ''
end-if
if $InputMessage <> ''
write #_XML_File_Number from '
' $InputMessage ''
end-if
write #_XML_File_Number from '
'
end-procedure
!***********************************************************************
! Procedure: xml_finalize_autofilter
! Purpose : use to finalize autofilter
!***********************************************************************
begin-procedure xml_finalize_autofilter()
!Developer doesn't need to call this function.
do xml_closing_worksheetoptions()
do xml_finalize_pagebreak()
if $_xml_Remember_Auto_Filter_Range <> ''
write #_XML_File_Number from '
write #_XML_File_Number from ' xmlns="urn:schemas-microsoft-com:office:excel">'
write #_XML_File_Number from ' '
let $_xml_Remember_Auto_Filter_Range = ''
end-if
end-procedure
!***********************************************************************
! Procedure: xml_finalize_workbook
! Purpose : use to finalize workbook
!***********************************************************************
begin-procedure xml_finalize_workbook()
do xml_closing_worksheet()
write #_XML_File_Number from '
' close #_XML_File_Number
end-procedure
! End of SQC
2) EXCLFILE.SQR
!********************Start of EXCLFILE.SQR************************
#include 'setenv.sqc'
#include 'setup32.sqc' !Printer and Page size initialization
Begin-setup
End-Setup
!**********************************************************************
! Procedure: Begin-Program
! Purpose : This Procedure is used to call all required procedures
!***********************************************************************
BEGIN-PROGRAM
DO Init-DateTime
DO Init-Number
DO Get-Current-DateTime
DO Define-Prcs-Vars
DO Get-Run-Control-Parms
Do xml_init_environment () !Initialization for the xml file writing to generate excel file
DO Init-Report
Do Wrap-Up
SHOW 'Program Ended at: ' $SysDateTime
END-PROGRAM
!**********************************************************************
!***********************************************************************
! Procedure: Init-Report
! Purpose : Initialize the Report
! Called by procedure : Begin-Program
!***********************************************************************
BEGIN-PROCEDURE Init-Report
#debug do Fin-Debug-Msg('Init-Report')
MOVE $SysDateTime to $ReportDateTime
SHOW 'Program started at: ' $SysDateTime
SHOW ' '
Let $Quote = ''''
LET #Flag = 0
do Get-Directory
LET $CHKFILE_NAME = $CHECK_DIR || 'RECORD_Report_Detail'|| '.xls'
Let $WorkSheet_name = 'RECORD_Report_Detail'
Begin-Select on-error = Sql-Error
A.RECNAME &Recname
A.FIELDNAME &FldName
CASE WHEN bitand(A.USEEDIT,1) = 0 THEN ' ' WHEN bitand(A.USEEDIT,1) = 1 THEN 'Y' ELSE ' ' END &KeyFld
A.FIELDNUM &FieldNum
B.FIELDTYPE &FldType
B.LENGTH &FldLength
CASE WHEN bitand(A.USEEDIT,256) = 0 THEN ' ' WHEN bitand(A.USEEDIT,256) = 256 THEN 'Y' ELSE ' ' END &UseEdit
A.EDITTABLE &Editable
A.DEFRECNAME &DefRecName
A.DEFFIELDNAME &DefFldName
let $Recname = &Recname
let $FldName = &FldName
let #FieldNum = &FieldNum
let $KeyFld = &KeyFld
Evaluate &FldType
WHEN = 0
let $FldType = 'CHAR'
break
WHEN = 1
let $FldType = 'LONG CHAR'
break
WHEN = 2
let $FldType = 'NBR'
break
WHEN = 3
let $FldType = 'SIGN'
break
WHEN = 4
let $FldType = 'DATE'
break
WHEN = 5
let $FldType = 'TIME'
break
WHEN = 6
let $FldType = 'DTTM'
break
WHEN = 7
let $FldType = 'IMG'
break
WHEN = 8
let $FldType = 'VERS'
break
when-other
let $FldType = ''
break
End-Evaluate
let #FldLength = &FldLength
let $UseEdit = &UseEdit
let $Editable = &Editable
let $DefRecName = &DefRecName
let $DefFldName = &DefFldName
If #Flag = 0
Do Open-File
Let #Flag = 1
End-If
Do xml_init_row (1,0,0,0,0) !Initialization of row where data will be written
!Write values in cells in the row initialized above
Do xml_cell_char($Recname, 0.01, 1,0)
Do xml_cell_char($FldName, 0.01, 1,0)
Do xml_cell_char($KeyFld, 0.01,1,0)
Do xml_cell_number(#FieldNum,'999,999,999,999.99', 0.01, 27,0)
Do xml_cell_char($FldType, 0.01, 1,0)
Do xml_cell_number(#FldLength,'999,999,999,999.99', 0.01, 27,0)
Do xml_cell_char($UseEdit, 0.01, 1,0)
Do xml_cell_char($Editable, 0.01, 1,0)
Do xml_cell_char($DefRecName, 0.01, 1,0)
Do xml_cell_char($DefFldName, 0.01, 1,0)
FROM PSRECFIELDDB A, PSDBFIELD B
WHERE A.RECNAME = 'VOUCHER'
AND A.FIELDNAME = B.FIELDNAME
ORDER BY 1,4
end-select
Do xml_finalize_workbook()
END-PROCEDURE !Init-Report
!***********************************************************************
!***********************************************************************
! Procedure: Open-File
! Purpose : Open File for writing.
!***********************************************************************
BEGIN-PROCEDURE Open-File
#debug do Fin-Debug-Msg('Open-File')
Let $Encoding_F = 'UTF-8'
Do xml_init_file(10,$CHKFILE_NAME,0,0,$Encoding_F) !Open xml file for writing
Do Setup_XML_styles !Setup styles for cells to write data
Do xml_Init_Worksheet ($WorkSheet_name,0,0) !Initialization for the worksheet where data will be write
!Initialize columns where data will be written
Do Xml_Init_Col(1,0,15,0,0,0)
Do Xml_Init_Col(2,0,18,0,0,0)
Do Xml_Init_Col(3,0,3,0,0,0)
Do Xml_Init_Col(4,0,8,0,0,0)
Do Xml_Init_Col(5,0,10,0,0,0)
Do Xml_Init_Col(6,0,6,0,0,0)
Do Xml_Init_Col(7,0,10,0,0,0)
Do Xml_Init_Col(8,0,15,0,0,0)
Do Xml_Init_Col(9,0,15,0,0,0)
Do Xml_Init_Col(10,0,18,0,0,0)
Do xml_init_row (1,0,0,0,0) !Initialization of row where data will be written
!Write char values for heading in cells in the row initialized above
Do xml_cell_char('Record', 0.01, 20,0)
Do xml_cell_char('Field', 0.01, 20,0)
Do xml_cell_char('Key', 0.01, 20,0)
Do xml_cell_char('FieldNum', 0.01, 20,0)
Do xml_cell_char('Type', 0.01, 20,0)
Do xml_cell_char('Length', 0.01, 20,0)
Do xml_cell_char('Required', 0.01,20,0)
Do xml_cell_char('PromptRecord', 0.01, 20,0)
Do xml_cell_char('DefaultRec', 0.01,20,0)
Do xml_cell_char('DefaultField', 0.01,20,0)
END-PROCEDURE !Open-File
!***********************************************************************
!***********************************************************************
! Procedure: Get-Directory
! Purpose : Get Directory for placing file.
!***********************************************************************
begin-procedure Get-Directory
#debug do Fin-Debug-Msg('Get-Directory')
begin-select
ORIGOUTDEST
PRCSOUTPUTDIR
if rtrim (upper(&origoutdest), ' ') = '%%LOG/OUTPUT DIRECTORY%%'
let $CHECK_DIR = rtrim(&prcsoutputdir, ' ') || '\'
else
let $CHECK_DIR = rtrim(&origoutdest, ' ')
end-if
from PSPRCSPARMS where
PRCSINSTANCE = #prcs_process_instance
end-select
if isblank($CHECK_DIR)
let $CHECK_DIR ='{FILEPREFIX}'
end-if
#debuge show '$directory: ' $CHECK_DIR
end-procedure !Get-Directory
Begin-Procedure Setup_XML_styles
#debug do Fin-Debug-Msg('Setup_XML_styles')
Let $Format = 'Fixed'
Let $Format1 = 'Standard'
Let $Format2 = '@'
Let $Format3 = 'Short date'
DO xml_init_style (0)
Do xml_style_alignment('Center', 'Bottom', 0, 0)
Do xml_style_border('Top','Continuous',1)
Do xml_style_font('Times New Roman', 12, 1)
do xml_style_interior('#C0C0C0', 'Solid')
Do xml_style_numberformat($Format)
Do xml_style_protection(#Protected, #Hideformula)
DO xml_init_style (1) !Title
Do xml_style_alignment('Center', 'Bottom', 0, 0)
Do xml_style_border('Bottom','Continuous',1)
Do xml_style_border('Left','Continuous',1)
Do xml_style_border('Right','Continuous',1)
Do xml_style_border('Top','Continuous',1)
Do xml_style_font('Calibri', 11, 1)
Do xml_style_interior('#FFFFCC', 'Solid')
DO xml_init_style (2)
Do xml_style_alignment('Left', 'Bottom', 0, 0)
Do xml_style_border('Bottom','Continuous',1)
Do xml_style_border('Left','Continuous',1)
Do xml_style_border('Right','Continuous',1)
Do xml_style_border('Top','Continuous',1)
Do xml_style_font('Calibri', 11, 1)
Do xml_style_interior('#FFFFFF', 'Solid')
DO xml_init_style (3)
Do xml_style_alignment('Center', 'Bottom', 0, 0)
Do xml_style_border('Bottom','Continuous',1)
Do xml_style_border('Left','Continuous',1)
Do xml_style_border('Right','Continuous',1)
Do xml_style_border('Top','Continuous',1)
Do xml_style_font('Calibri', 11, 1)
Do xml_style_interior('#FFFFFF', 'Solid')
DO xml_init_style (16)
Do xml_style_interior('#FFFFCC', 'Solid')
DO xml_init_style (17)
Do xml_style_numberformat($Format3)
Do xml_style_font('Calibri', 11, 0)
DO xml_init_style (18)
Do xml_style_numberformat($Format1)
Do xml_style_border('Bottom','Double',3)
Do xml_style_border('Left','Double',3)
Do xml_style_border('Right','Double',3)
Do xml_style_border('Top','Double',3)
Do xml_style_font('Calibri', 11, 1)
Do xml_style_interior('#FFFFCC', 'Solid')
DO xml_init_style (19)
Do xml_style_numberformat($Format2)
Do xml_style_font('Calibri', 11, 0)
DO xml_init_style (20)
Do xml_style_border('Bottom','Double',3)
Do xml_style_border('Left','Double',3)
Do xml_style_border('Right','Double',3)
Do xml_style_border('Top','Double',3)
Do xml_style_font('Calibri', 11, 1)
Do xml_style_interior('#C0C0C0', 'Solid')
Do xml_style_alignment('Right', 'Bottom', 0, 0)
DO xml_init_style (21)
Do xml_style_numberformat($Format1)
Do xml_style_font('Calibri', 11, 0)
DO xml_init_style (27)
Do xml_style_alignment('Right', 'Bottom', 0, 0)
Do xml_style_font('Calibri', 11, 0)
Do xml_style_interior('#FFFFCC', 'Solid')
Do xml_style_numberformat($Format)
DO xml_init_style (28)
Do xml_style_alignment('Left', 'Bottom', 0, 0)
Do xml_style_font('Calibri', 11, 0)
DO xml_init_style (29)
Do xml_style_alignment('Right', 'Bottom', 0, 0)
Do xml_style_font('Calibri', 11, 0)
Do xml_style_numberformat($Format)
DO xml_init_style (30)
Do xml_style_interior('#CCFFCC', 'Solid')
DO xml_init_style (32)
Do xml_style_alignment('Right', 'Bottom', 0, 0)
Do xml_style_font('Calibri', 11, 0)
Do xml_style_interior('#CCFFCC', 'Solid')
Do xml_style_numberformat($Format)
DO xml_init_style (39)
Do xml_style_alignment('Center', 'Bottom', 0, 0)
Do xml_style_font('Calibri', 11, 1)
Do xml_style_interior('#00B0F0', 'Solid')
DO xml_init_style (46)
Do xml_style_font('Calibri', 11, 1)
Do xml_style_interior('#CCFFCC', 'Solid')
Do xml_finalize_style()
End-Procedure !Setup_XML_styles
!***********************************************************************
!***********************************************************************
! Procedure: Wrap-Up
! Purpose : Update the Process Run Status
!***********************************************************************
Begin-Procedure Wrap-Up
#debug do Fin-Debug-Msg('Wrap-Up')
Display '*** End Of Report ***'
if $prcs_process_instance <> ''
do Update-Prcs-Run-Status
end-if
end-procedure
!***********************************************************************
!***********************************************************************
! Procedure: Fin-Debug-Msg
! Purpose : Fin-Debug-Msg
!***********************************************************************
begin-procedure Fin-Debug-Msg($procedure_name)
display ' '
display '----------------------------------'
display $procedure_name
#debugt date-time () {Native-DateTime} &SysDateTime
#debugt move &SysDateTime to $SysDateTime
#debugt show 'TIMING, ' $procedure_name ', ' $SysDateTime
display ' '
end-procedure ! Fin-Debug-Msg
!***********************************************************************
#include 'prcsapi.sqc'
#include 'prcsdef.sqc'
#include 'reset.sqc' !reset printer
#include 'curdttim.sqc' !Get-Current-DateTime procedure
#include 'datetime.sqc' !Routines for date and time formatting
#include 'number.sqc' !Routines to format numbers
#include 'datemath.sqc' !Converts dates into correct format
#include 'validdt.sqc' !Checks a date in native format for validity
#include 'eoj.sqc' !End-Of-Job
#include 'sqrtrans.sqc'
#include 'readxlat.sqc'
#include 'ExclWrite.sqc' !To write date in Excel format
!***********************************************************************
!************************End of EXCLFILE.SQR**********************************