人法地,地法天,天法道,道法自然
分类:
2009-06-09 15:37:29
在执海关合同表,当一张或多张合同在系统处理完毕后,要生成excel文件。最近在处理生成excel时,引发了一此格式问题。当出出口成品数据量小时,基本可行,但多达10个以上出口成品时,在格式上就出现问题了。
在格式上,成品8之前的成品7,成品6,……均能按每四个单元格合并成一个单元格并居中,AM所对应的列号为:39;程序处理的方法如下:
if y < 27 .
perform changeAscii using y changing xs.
concatenate xs xc into a.
else.
sh = y / 26.
yu = y mod 26 .
perform changeAscii using sh changing xs.
perform changeAscii using yu changing xe.
concatenate xs xe xc into a.
endif.
*
m = y + 3 .
if m < 27 .
perform changeAscii using m changing xs.
concatenate xs xc into b.
else.
sh = m / 26.
yu = m mod 26 .
perform changeAscii using sh changing xs.
perform changeAscii using yu changing xe.
concatenate xs xe xc into b.
endif.
Y,m表示当前的列号,当y=39时,sh = 2,yu=13所对应的列号栏位BM,这里问题就出现了:
Sh = 39 / 26,应当等于1才对,因为sh定义是整数类型。当询问同事后,发现sh是做除法的结果,进行了四舍五入。做整除必须写成sh = y div 26,这样sh=1,yu=13,所对应的列栏位就是AM。
别外测试发现,当y=78时,sh=3,yu=0,按规则对应的栏位是CZ,但是实际上78列号所对应的栏位是BZ,处理时,对于这样的特殊情况必需减1,才能正确。由于每张合同中出口成品品种不能确定有多少种,那么也就不能确定栏位有多少,各种情况都有可能发生。但依目前的规则操作,知道行号是多少,就能算出对应的栏位。
更改后的结果如下: