【ABAP妙用】复制ALV之负号提前
生活随笔
收集整理的這篇文章主要介紹了
【ABAP妙用】复制ALV之负号提前
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
場景:
用戶一般Ctrl+C復制ALV數據到Excel處理,如果有負數的數值,負號在數值的后面,Excel不認識,要費勁巴拉的一個個改正,苦不堪言!
本程序功能:
在ALV復制數據后,直接更改剪貼板里面的數據,把負號提到前面,然后直接在Excel粘貼就可以了。如果有逗號作為千分位符,也一并去掉。
程序邏輯:
獲取剪貼板數據后,根據制表符分割字段,如果字段包含
0123456789,.-?之外的字符,說明不是數值,跳過;否則,判斷最后的一個字符是不是負號“-”,如果不是,跳過;如果是負號,則把這個負號挪到數值前面,同時把里面的千分位符去掉,例如:23,345.58- 變成 -23345.58。依次處理所有行,處理完畢把處理過的數據再粘貼到剪貼板,就可以直接在Excel粘貼了。
愛心提示:
把事務碼放到收藏夾里面,用戶只要雙擊一下就OK了。
比如復制了這樣的數據:
使用前:
使用后:
源代碼如下:
REPORT ZFRONT_SIGN NO STANDARD PAGE HEADING.DATA : LT_CLIP TYPE TABLE OF CHAR4000 WITH HEADER LINE,LT_OUT TYPE TABLE OF CHAR4000 WITH HEADER LINE,LT_FLDS TYPE TABLE OF STRING WITH HEADER LINE,LEN TYPE I,FLAG.START-OF-SELECTION.CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_IMPORTIMPORTINGDATA = LT_CLIP[]EXCEPTIONSCNTL_ERROR = 1ERROR_NO_GUI = 2NOT_SUPPORTED_BY_GUI = 3OTHERS = 4.IF LT_CLIP[] IS INITIAL.MESSAGE S000(OO) WITH 'No data' DISPLAY LIKE 'E'.RETURN.ENDIF.LOOP AT LT_CLIP.CLEAR : LT_FLDS[],LT_OUT.SPLIT LT_CLIP AT %_HORIZONTAL_TAB INTO TABLE LT_FLDS.LEN = STRLEN( LT_CLIP ) - 1.IF LEN > 0 AND LT_CLIP+LEN(1) = %_HORIZONTAL_TAB.APPEND INITIAL LINE TO LT_FLDS.ENDIF.LOOP AT LT_FLDS.LEN = STRLEN( LT_FLDS ) - 1.IF LEN > 0 AND LT_FLDS CO ' 0123456789,.-' AND LT_FLDS+LEN(1) = '-'.TRANSLATE LT_FLDS USING '- '.TRANSLATE LT_FLDS USING ', '.CONCATENATE '-' LT_FLDS INTO LT_FLDS.CONDENSE LT_FLDS NO-GAPS.FLAG = 'X'.ENDIF.CONCATENATE LT_OUT %_HORIZONTAL_TAB LT_FLDS INTO LT_OUT.ENDLOOP.SHIFT LT_OUT.APPEND LT_OUT.ENDLOOP.IF FLAG = 'X'.CALL FUNCTION 'CLPB_EXPORT'TABLESDATA_TAB = LT_OUTEXCEPTIONSCLPB_ERROR = 1OTHERS = 2.IF SY-SUBRC = 0.MESSAGE S000(OO) WITH 'Success'.ELSE.MESSAGE S000(OO) WITH 'Error' DISPLAY LIKE 'E'.ENDIF.ELSE.MESSAGE S000(OO) WITH 'No Data'.ENDIF.?
總結
以上是生活随笔為你收集整理的【ABAP妙用】复制ALV之负号提前的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【PP操作手册】运行MRP产生计划订单
- 下一篇: S4的ESH Bug导致Search h