abap webdynpro 導入excel並顯示

sdn上有關於將excel如何通過abap webdynpro導入並顯示的示例,但是找着去做之後會發現導入並顯示出的是亂碼。其實本身示例給出的就是按照txt的格式來做的,這其實是由於sap本身對於把excel得來的xstring重新轉成string類型的過程無法正確匹配罷了,至今sap沒有給出一個很好的解決辦法,按照示例代碼:

METHOD onactionon_upload . TYPES :
BEGIN OF str_itab,
name(10) TYPE c,
age(10) TYPE c,
END OF str_itab. DATA : t_table1 TYPE STANDARD TABLE OF str_itab,
i_data TYPE STANDARD TABLE OF string,
lo_nd_sflight TYPE REF TO if_wd_context_node,
lo_el_sflight TYPE REF TO if_wd_context_element,
l_string TYPE string,
fs_table TYPE str_itab,
l_xstring TYPE xstring,
fields TYPE string_table,
lv_field TYPE string.
DATA : t_table TYPE if_main=>elements_data_tab,
data_table TYPE if_main=>elements_data_tab.
* get single attribute wd_context->get_attribute(
EXPORTING
name = `DATASOURCE`
IMPORTING
value = l_xstring ).
data: conv type ref to cl_abap_conv_in_ce.
call method cl_abap_conv_in_ce=>create
exporting
input = l_xstring
encoding = 'UTF-8'
replacement = '?'
ignore_cerr = abap_true
receiving
conv = conv .
conv->read( importing data = l_string ).

[color=orange] CALL FUNCTION 'HR_KR_XSTRING_TO_STRING'
EXPORTING
in_xstring = l_xstring
IMPORTING
out_string = l_string. 廢除[/color]
SPLIT l_string AT cl_abap_char_utilities=>newline INTO TABLE i_data.
* Bind With table Element.
LOOP AT i_data INTO l_string.
SPLIT l_string AT cl_abap_char_utilities=>horizontal_tab INTO TABLE fields.
READ TABLE fields INTO lv_field INDEX 1.
fs_table-name = lv_field.
READ TABLE fields INTO lv_field INDEX 2.
fs_table-age = lv_field.
APPEND fs_table TO t_table1.
ENDLOOP.
lo_nd_sflight = wd_context->get_child_node( 'DATA_TAB' ).
lo_nd_sflight->bind_table( t_table1 ).
ENDMETHOD.


DATASOURCE爲xstring或string都可以。
廢除部分其實無法正確將xstring轉化爲string。

在測試的時候需要將excel文件先保存爲unicode的txt文件,然後再將txt文件保存爲utf8格式導入方可。否則非utf8文本文件導入時會將文本所有內容在每一單元格顯示。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章