今日在批处理作业中,根据读取excel的功能中添加了对于excel模板的校验,做防呆处理,特此记录
PRIVATE FUNCTION cxxxp999_import(p_excelname) #cxxp999为自定义的批次处理作业
DEFINE p_excelname LIKE type_t.chr1000
DEFINE l_excelname STRING
DEFINE li_i LIKE type_t.num10
DEFINE xlapp,iRes,iRow LIKE type_t.num5
DEFINE l_err_message STRING
#此处定义的就是excel表格中的数据集合
DEFINE l_excel RECORD
l_xxxxdocno LIKE xxxx_t.xxxxdocno,
l_xxxx004 LIKE xxxx_t.xxxx004
END RECORD
DEFINE f_success LIKE type_t.num5 #定义首行校验的布尔值
DEFINE f_1,f_2 STRING #定义首行的值
WHENEVER ERROR CONTINUE
LET f_success = TRUE #默认首行校验成功
LET f_1 =NULL
LET f_2 =NULL #初始化首行的值
#创建EXCEL实例
CALL ui.interface.frontCall('WinCOM','CreateInstance',['Excel.Application'],[xlApp])
IF xlApp <> -1 THEN#excel表格为空
CALL ui.interface.frontCall('WinCOM','CallMethod',[xlApp,'WorkBooks.Open',l_excelname],[iRes])#新建excel文件
IF iRes <> -1 THEN #excel表格为空
CALL ui.interface.frontCall('WinCOM','GetProperty',[xlApp,'ActiveSheet.UsedRange.Rows.Count'],[iRow])
IF iRow > 1 THEN #获取excel数据
CALL ui.interface.frontCall('WinCOM','GetProperty',[xlApp,'ActiveSheet.Cells(1,1).Value'],[f_1]) #获取excel表格中第一行第一列的值
CALL ui.interface.frontCall('WinCOM','GetProperty',[xlApp,'ActiveSheet.Cells(1,2).Value'],[f_2]) #获取excel表格中第一行第二列的值
#判断第一行的一、二列是否为指定的值,来确认是否符合业务处理的需求
IF cl_null(f_1) OR f_1 !='A' THEN
LET f_success = FALSE
LET l_err_message = l_err_message,"第一列应为A"
END IF
IF cl_null(f_2) OR f_2 !='B' THEN
LET f_success = FALSE
LET l_err_message = l_err_message,"第二列应为B"
END IF
#根据f_success的情况返回报错
IF f_success = TRUE THEN
FOR li_i = 2 TO iRow#第二行开始读,读到最后一行
INITIALIZE l_excel.* TO NULL#初始化数据集,将表格中的数据读到数据集中
CALL ui.interface.frontCall('WinCOM','GetProperty',[xlApp,'ActiveSheet.Cells('||li_i||',1).Value'],[l_excel.l_xxxxdocno])
CALL ui.interface.frontCall('WinCOM','GetProperty',[xlApp,'ActiveSheet.Cells('||li_i||',2).Value'],[l_excel.l_xxxx004])
#**业务逻辑代码***
ELSE #如果f_success 不为TRUE则表示excel表格有误,执行报错
INITIALIZE g_errparam TO NULL
LET g_errparam.code = '!'
LET g_errparam.extend = 'EXCEL文件不正确,请确认',l_err_message
LET g_errparam.popup = TRUE
CALL cl_err()
END IF #f_success
END IF
ELSE
INITIALIZE g_errparam TO NULL
LET g_errparam.code = '!'
LET g_errparam.extend = 'NO FILE'
LET g_errparam.popup = TRUE
CALL cl_err()
END IF#excel表格为空
ELSE
INITIALIZE g_errparam TO NULL
LET g_errparam.code = '!'
LET g_errparam.extend = 'NO EXCEL'
LET g_errparam.popup = TRUE
CALL cl_err()
END IF#excel表格为空