2011-09-25 74 views
3

美好的一天每個人獲取的值,顯示在Excel文件到ALV

有這事我一直試圖在ABAP行使,這是在ALV列數據更顯示從Excel文件檢索到的值一張內部桌子。我一直在試圖調試我的程序很長一段時間,我似乎無法解決這個錯誤,指出哪個是「字段符號尚未分配」,請指導我。我已經對如何解決這個短暫的轉儲錯誤做了一些研究,但是大多數在網上發佈的其他問題都是從列表字段中選擇的。我只是想知道,也許我的情況與其他人有點不同。

從excel中檢索值的函數正常工作,我在顯示它們時沒有問題。下面是我構造的代碼。

TYPE-POOLS: truxs, 
     slis. 

TYPES: BEGIN OF t_itab, 
     col1 TYPE char20, 
     col2 TYPE char20, 
     col3 TYPE char20, 
     col4 TYPE char20, 
     col5 TYPE char20, 
    END OF t_itab, 
    t_it_itab type STANDARD TABLE OF t_itab. 

Data: gt_tab TYPE t_it_itab, 
    wa_tab TYPE t_itab, 
    g_numrows TYPE i. 

PARAMETERS: p_fname TYPE c LENGTH 50. 

INITIALIZATION. 

AT SELECTION-SCREEN OUTPUT. 

AT SELECTION-SCREEN. 
AT SELECTION-SCREEN on VALUE-REQUEST FOR p_fname. 
DATA: l_filename LIKE IBIPPARMS-PATH. 
CALL FUNCTION 'F4_FILENAME' 
EXPORTING 
    PROGRAM_NAME  = SYST-CPROG 
    DYNPRO_NUMBER  = '1000' 
IMPORTING 
    FILE_NAME   = l_filename 
     . 
p_fname = l_filename. 

START-OF-SELECTION. 

DATA: lc_fname TYPE RLGRAP-FILENAME, 
    lt_tab TYPE TRUXS_T_TEXT_DATA. 

    lc_fname = p_fname. 

CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' 
    EXPORTING 
    I_TAB_RAW_DATA    = lt_tab 
    I_FILENAME     = lc_fname 
    TABLES 
    I_TAB_CONVERTED_DATA  = gt_tab 
    EXCEPTIONS 
    CONVERSION_FAILED   = 1 
    OTHERS      = 2 
     . 
IF SY-SUBRC <> 0. 
    WRITE 'Error'. 
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
*   WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF. 

" Delete First Row/HEADER 
DELETE gt_tab INDEX 1. 

IF gt_tab[] is INITIAL. 
    MESSAGE 'No Record(s) found' TYPE 'I'. 
    EXIT. 
ELSE. 
    PERFORM DisplayALv. 
ENDIF. 

FORM DISPLAYALV. 
DATA: l_it_fcat type SLIS_T_FIELDCAT_ALV, 
     l_wa_fcat TYPE SLIS_FIELDCAT_ALV. 

l_wa_fcat-fieldname = 'col1'. 
l_wa_fcat-ref_tabname = 'gt_tab'. 
l_wa_fcat-reptext_ddic = 'Column 1'. 
l_wa_fcat-outputlen = '30'. 
APPEND l_wa_fcat TO l_it_fcat. 
CLEAR l_wa_fcat. 

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 
    EXPORTING 
    I_CALLBACK_PROGRAM  = sy-repid 
    IT_FIELDCAT    = l_it_fcat 
    I_DEFAULT   = 'X' 
    I_SAVE    = 'A' 
    TABLES 
    T_OUTTAB   = gt_tab[]. 

IF SY-SUBRC <> 0. 
    WRITE: 'SY-SUBRC: ', SY-SUBRC . 
ENDIF. 

ENDFORM. 

在我的程序中的任何提示,技巧和建議將被高度追捧。由於提前

回答

6

你正在使用的不是在數據字典中定義的類型。這在創建ALV fieldcat時需要採用不同的方法。試試這個:

l_wa_fcat-fieldname = 'COL1'. 
l_wa_fcat-inttype = 'C'. 
l_wa_fcat-outputlen = '30'. 
l_wa_fcat-text_fieldname = 'Column 1'. 
l_wa_fcat-seltext_s = 'Column 1'. 

此外請確保您輸入大寫字母的字段名稱值。

+0

您好,先生謝謝您的回覆,並認真對待這一切。但你是否介意解釋我,你怎麼知道「l_wa_fcat-fieldname」是什麼?是否總是需要用大寫字母?最後的「l_wa_fcat-seltext_s」是什麼意思?謝謝你,上帝保佑 – Kid

+1

fieldname包含本地數據類型t_itab中的字段名稱。在運行時,無論您如何在代碼中聲明它們,這些字段名都是大寫字母。 Seltext用於字段標籤。 –

+0

恩,謝謝先生,對我的啓發..但是有一個最後一個問題,我想提出,這是..「l_wa_fcat-inttype」的使用,我只能用這個時,我應該是字段名不是類型從一張桌子? – Kid

1

我不是ABAP專家,但我注意到你發佈的代碼兩兩件事:

  • 你說的錯誤是「字段符號尚未分配」,但你有沒有字段符號在你的代碼中。也許它在你所調用的某個功能模塊中使用。如果是這樣,請嘗試將代碼發佈到彈出錯誤的位置;
  • 你使用gt_tab [],如果我記得很清楚,它是訪問帶有標題行的內部表格主體的方法。在您的代碼中,gt_tab不是帶有標題行的內部表格,但是您可以使用它來存儲具有「TEXT_CONVERT_XLS_TO_SAP」功能的內部表格;

嘗試發佈錯誤正在生成的代碼。

問候, 的Sergiu

+2

gt_tab []與gt_tab具有相同的效果,如果gt_tab沒有標題行聲明(嘗試快3倍) – Esti

+0

@sepo感謝您的迴應和觀察Sepo先生,但即使我只是使用gt_tab本身我仍然遇到錯誤。在我調用DisplayAlv表單後,我仍然可以看到我從excel中檢索到的值,並因此得出結論:我的內部表格不是空的,但我懷疑是「l_wa_fcat-fieldname」,我認爲我在這裏放置的值這是錯誤的,導致了一個錯誤,僅僅是我甚至不知道在這個領域提供什麼的事實。請指導我,謝謝 – Kid