
안녕하세요..
구현은 다 되었는 데, 디버깅 모드에서 실제 엑셀 파일을 업로드한 후 저장되는 데이타를 확인해보면
당최 알수 없는 데이타들로 저장이 되네요.
무엇이 문제인지..휴..
소스로 도배해서 죄송합니다.
REPORT zvscandemo.
************************************************************************
* Selection screen
************************************************************************
PARAMETERS:
file TYPE localfile.
************************************************************************
* Events
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR file.
PERFORM file_f4.
START-OF-SELECTION.
PERFORM main.
************************************************************************
* Main program
************************************************************************
FORM main.
IF file IS INITIAL.
MESSAGE s058(vscan) DISPLAY LIKE 'E'.
EXIT. " =================== EXIT =====================
ENDIF.
* Access file and create XSTRING
TYPES:
ty_xline(1024) TYPE x.
DATA:
lf_file TYPE string,
lf_filelength TYPE i,
lt_datatab TYPE STANDARD TABLE OF ty_xline.
lf_file = file.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = lf_file
filetype = 'BIN'
IMPORTING
filelength = lf_filelength
CHANGING
data_tab = lt_datatab
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
DISPLAY LIKE 'E'
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT. " =================== EXIT =====================
ENDIF.
* Recombine binary data
DATA:
lf_tabline TYPE ty_xline,
lf_data TYPE xstring.
LOOP AT lt_datatab INTO lf_tabline.
CONCATENATE
lf_data
lf_tabline
INTO
lf_data
IN BYTE MODE.
ENDLOOP.
lf_data = lf_data(lf_filelength).
ENDFORM.
************************************************************************
* F4-help for filename
************************************************************************
FORM file_f4.
DATA:
lt_filetable TYPE filetable,
lf_rc TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
multiselection = abap_false
CHANGING
file_table = lt_filetable
rc = lf_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
DISPLAY LIKE 'E'
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
* Number of selected filed must be equal to one.
CHECK lf_rc = 1.
* Access selected file
DATA:
ls_file TYPE file_table.
READ TABLE lt_filetable INTO ls_file INDEX 1.
CHECK sy-subrc = 0.
file = ls_file-filename.
ENDFORM.
>안녕하세요..
>
>오늘 하루종일 파일 업로드/다운로드로 사경을 헤매고 있습니다.
>
>이전에 제가 엑셀 템플리트를 다운로드 가능 문의를 드렷는 데,
>이 다운로드 받을 템플리트에 내용을 입력하고 다시 업로드를 한 후 BDC를 태우려고 합니다.
>(아직 BDC는 무리고)
>
>엑셀 파일을 업로드 한 후 미리 선언한 internal table에 넣는 작업이 왜 이렇게 어려운지..
>WS_UPLOAD로 한참하다가 이 function은 안되는 거 같아 GUL_UPLOAD를 이용하려고 합니다.
>
>고수님들 엑셀 업로드 도와주셔요..
>
>고맙습니다.
>
>PS : 엑셀 파일 업로드 다른 방법이 있는지요?
댓글 6
-
e-abap
2007.05.31 01:54
file type을 'DAT' 또는 'ASC'로 변경하심이 -
김지성
2007.05.31 01:59
e-abap님 답변 고맙습니다. 물론 둘 다 해보았구요...
결론은 모두 안되네요..그래서 상황이상황인지라..걍 ALSM_EXCEL_TO_INTERNAL_TABLE Function 을 이용해야 겠네요..
이 Function 업로드 한 엑셀 파일을 바로 Internal Table로 저장해주는 function인데 좀 문제가 있어 다른 것으로 하려 했는데
걍 이 function으로 해야겠네요..암튼 답변 고맙습니다.
-
w
2007.05.31 03:47
위 함수는 참고로 1000라인까지밖에 안되더군요...확인해보세요...
-
鵬의 날개
2007.05.31 19:06
파일 업로드/다운로드 가 엑셀파일 내의 데이터를 업로드/다운로드 한다는 말씀이신가요???
아니면 엑셀 파일 자체를 업로드 다운로드 한다는 말씀이신가요???
상기 코딩은 엑셀 파일 자체를 바이너리 타입으로 변환해서 업로드하는 것이군요...
LT_DATATAB에는 엑셀의 내용이 아니라 엑셀 자체가 들어가 있습니다...
gui_upload 를 사용하실려면...
엑셀을 다른이름으로 저장하기 하셔셔(탭으로 분리된 *.txt) 사용하시면 됩니다...
데이터 타입은 'DAT'이구요... -
skna
2007.05.31 21:43
아래 펑션을 사용해 보심이 어떨까 싶습니다.
call function 'KCD_EXCEL_OLE_TO_INT_CONVERT'
exporting
filename = *file
i_begin_col = '1'
i_begin_row = '2'
i_end_col = '11'
i_end_row = '65000'
tables
intern = g_file_t
exceptions
inconsistent_parameters = 1
upload_ole = 2
others = 3. -
ECBASE
2007.05.31 22:32
'KCD_EXCEL_OLE_TO_INT_CONVERT'
함수는 필드에 32CHAR까지만 저장되는걸로 알고 있습니다.