ABAP EXCEL导入时,处理日期格式

EXCEL导入时,日期通常包含'./-\'字符,时间包含'::'字符,SAP里面不包含这些,需要转换。

原文链接: ABAP EXCEL导入时,处理日期格式

这里直接调用接口处理就好了,CHAR50是因为ALSM_EXCEL_TO_INTERNAL_TABLE接口里面的ALSMEX_TABLINE-VALUE就是CHAR50。

如果是自定义函数,导入字段长度需要调整。

源代码:

FUNCTION ZRFC_FI_002.
*"----------------------------------------------------------------------
*"*"區域介面:
*"  IMPORTING
*"     VALUE(P_DATUM) TYPE  CHAR50 OPTIONAL
*"     VALUE(P_UZEIT) TYPE  CHAR50 OPTIONAL
*"  EXPORTING
*"     VALUE(OP_DATUM) TYPE  SY-DATUM
*"     VALUE(OP_UZEIT) TYPE  SY-UZEIT
*"----------------------------------------------------------------------
  DATA: LV_STR2 TYPE CHAR1.
  DATA: LV_STR1 TYPE STRING,
        LV_STR3 TYPE STRING,
        LV_STR4 TYPE STRING,
        LV_LEN TYPE I.
  DATA: LT_STR  LIKE TABLE OF LV_STR1.

  IF P_DATUM IS NOT INITIAL.
    IF '/.-\' CA P_DATUM.
      LV_STR2 = P_DATUM+4(1).
      SPLIT P_DATUM AT LV_STR2 INTO TABLE LT_STR.
      LOOP AT LT_STR INTO LV_STR1.
        LV_LEN = STRLEN( LV_STR1 ).
        IF LV_LEN EQ 1.
          CONCATENATE LV_STR3 '0' LV_STR1 INTO LV_STR3.
        ELSE.
          CONCATENATE LV_STR3 LV_STR1 INTO LV_STR3.
        ENDIF.
        CLEAR: LV_STR1.
      ENDLOOP.
      OP_DATUM = LV_STR3.
    ELSE.
      OP_DATUM = P_DATUM.
    ENDIF.
  ENDIF.

  IF '::' CA P_UZEIT.
    CLEAR: LT_STR[].
    LV_STR2 = P_UZEIT+2(1).
    IF '::' CA LV_STR2.
      SPLIT P_UZEIT AT LV_STR2 INTO TABLE LT_STR.
    ELSE.
      LV_STR2 = P_UZEIT+1(1).
      SPLIT P_UZEIT AT LV_STR2 INTO TABLE LT_STR.
    ENDIF.

    LOOP AT LT_STR INTO LV_STR1.
      LV_LEN = STRLEN( LV_STR1 ).
      IF LV_LEN EQ 1.
        CONCATENATE LV_STR4 '0' LV_STR1 INTO LV_STR4.
      ELSE.
        CONCATENATE LV_STR4 LV_STR1 INTO LV_STR4.
      ENDIF.
      CLEAR: LV_STR1.
    ENDLOOP.
    OP_UZEIT = LV_STR4.
  ELSE.
    OP_UZEIT = P_UZEIT.
  ENDIF.

ENDFUNCTION.
View Code

 下面是去除千分位的

   IF ',' CO TAB-VALUE.
        REPLACE ',' WITH '' INTO TAB-VALUE.
        CONDENSE TAB-VALUE NO-GAPS.
      ENDIF.

posted @ 2023-08-15 08:38  蛀牙首领  阅读(216)  评论(0编辑  收藏  举报