엑셀 업로드/다운로드

Hamm1n·7일 전

Canias/TROIA

목록 보기
21/28

1. 서버에 양식 샘플 업로드

  1. 코드 내 경로에 엑셀 파일 생성
  2. DEVT30 접속
  3. 아래 코드 실행
OBJECT:
 STRING LVPATHSERVER,/*서버 폴더 위치*/
 STRING LVPATHLOCAL;/*로컬  폴더 위치*/

LVPATHSERVER = STRSUBFIX + 'FILEUPLOAD/TEMPLATE/EDUT804NK/' + 'EDUT804NK_SAMPLE_BOOK_DOC.xlsx'; 
/*[FILEUPLOAD/TEMPLATE/EDUT804NK/EDUT804NK_SAMPLE_BOOK_DOC.xlsx]*/

LVPATHLOCAL = '*' + GETUSERINFO('user.home') + GETUSERINFO('file.separator') + 'Downloads' + GETUSERINFO('file.separator') + 'EDUT804NK_SAMPLE_BOOK_DOC.xlsx'; 

/*[*C:\Users\hmoh\Downloads\EDUT804NK_SAMPLE_BOOK_DOC.xlsx]*/
 

COPYFILE LVPATHLOCAL INTO LVPATHSERVER;

: 서버 위치 지정 후, 로컬 위치 명시
그리고 COPYFILE 로 서버에 파일 저장

2. 버튼 설정

다운로드 버튼

BTNDL.Click()

GLOBAL:
	STRING MSGTEXT,
	STRING STRSUBFIX,
	STRING S1,
	STRING S2;

MESSAGE DEV C9999 WITH '양식을 다운로드 하시겠습니까?';

IF CONFIRM == 'NO' THEN
	RETURN;
ENDIF;


STRSUBFIX = SYSCOMMONNK.GETFILEPATH(SYSCOMMONNK.SESSIONINFO('COMP_CODE'), 'FILE_ROOT');
S1 = STRSUBFIX + 'EDUT804NK_SAMPLE_BOOK_DOC.xlsx';
S2 = '*' + GETUSERINFO('user.home') + GETUSERINFO('file.separator') + 'Downloads' + GETUSERINFO('file.separator') + 'EDUT804NK/EDUT804NK_SAMPLE_BOOK_DOC.xlsx';

COPYFILE S1 INTO S2;

MSGTEXT = ' 엑셀 파일이 생성되었습니다.' + TOCHAR(10) + 'Path : ' + S2;

MESSAGE DEV I9999 WITH MSGTEXT;

핵심코드

  • STRSUBFIX = SYS..
    : 회사 코드와 FILE_ROOT 정보를 이용해서 서버에 있는 파일 저장 기본 경로를 가져옴

    : Errors: can not invoke class method:SESSIONINFO 에러 발생,
    BEFORE 에 변수 선언 해줘야함
    GLOBAL: SYSCOMMONNK SYSCOMMONNK;


업로드 버튼

  1. 업로드 할 수 있는 다이얼로그 호출
CALL DIALOG EDUT804F003NK WITH LOCATION 1050,50 SIZE 400,95;
SET NKRENTITEM8100 TO RESIZE;

파일 ㄹㅇ 업로드버튼

  1. BEFORE (EDUT804F003NK)
SELECT *
	FROM NKRENTITEM3100
	WHERE 1 = 2
	INTO TMPRENTITEM;

: NKRENTITEM8100 하고 동일한 구조의 임시테이블 생성

  1. READEXCELFILE (EDUT804F003NK)
  • ROWCOUNT = 2; : 헤더 제외 2번쨰 줄부터 읽기
  • while로 무한반복 주다가 빈값(끝)을만나면 반복 종료
  • ACCESSXLS FILENAME READ.. 로 읽어오고,
    그 값 APPEND ROW TO TMPRENTITEM; 로 추가하고...
  • 그리고 매핑
ACCESSXLS FILENAME READ SHEET 1 'A' ROWCOUNT VALUE TMPRENTITEM_BOOKID;
ACCESSXLS FILENAME READ SHEET 1 'B' ROWCOUNT VALUE TMPRENTITEM_RENTAMOUNT;
ACCESSXLS FILENAME READ SHEET 1 'C' ROWCOUNT VALUE TMPRENTITEM_RETURNEXPECTEDDATE;
ACCESSXLS FILENAME READ SHEET 1 'D' ROWCOUNT VALUE TMPRENTITEM_RETURNDATE;
ACCESSXLS FILENAME READ SHEET 1 'E' ROWCOUNT VALUE TMPRENTITEM_STATUS;
ACCESSXLS FILENAME READ SHEET 1 'F' ROWCOUNT VALUE TMPRENTITEM_OVERDUEAMOUNT;
ACCESSXLS FILENAME READ SHEET 1 'G' ROWCOUNT VALUE TMPRENTITEM_DAMAGEDAMOUNT;
  1. OK버튼

IF TRIM(FILEPATH) == '' THEN
    MESSAGE DEV E9999 WITH '파일을 선택해주세요.';
    RETURN;
ENDIF;

THIS.READEXCELFILE(SCCOMPANY,FILEPATH); 

CLEAR ALL NKRENTITEM8100;
LOOP AT TMPRENTITEM
BEGIN
	APPEND ROW TO NKRENTITEM8100;
	MOVE-CORRESPONDING TMPRENTITEM TO NKRENTITEM8100;
ENDLOOP;

SHUTDOWN;

끝 이러면 넘어옴

요약해보기
엑셀 파일 서버에 올리기 > 양식다운로드 끝
엑셀로 값 채우기 > 임시테이블 구조만 복사해서 생성 > 엑셀값 반복문으로 임시테이블 채우기 > 그 임시테이블 진짜 테이블에 집어 넣기

0개의 댓글