아래 작성내용은 이미 카페에서 oleExcel..이용하여 Sheet별 저장방법, Cell의 특성 설정방법 등..많은 글들을 올리셨던 분들의 혼합본임을 밝혀 둡니다. 질문올렸던 내용들은 대부분 안되는 부분에 대해
올린글들이었기 때문에 혹여 저를 비롯한 초보자분들은 혼란스러워 하실 것 같아 올려봅니다.
큰 도움 주셨던 건우아빠님을 비롯한 많은 분들에게 감사드리며 올립니당 ~ (__)(--)
Excel로 입력되는 값 Text형식 지정 방법
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//먼저 지정하고자 하는 셀의 위치에 값을 지정해줍니다 : (1:일반),(2:텍스트),(3:날짜)
long Array1[], Array2[]
Array1[] = {1,1,1,2,2} //ex = {A,B,C,D,E} 라면..A,B,C는 일반형식(기본)이 되고 D,E는 텍스트형식이 됩니다.
Array2[] = {1,1,1,2,2} //엑셀에 값이 먼저 들어가기전에 형식지정을 먼저 해주어 ' 0 ' 값이 사라지는것을 막습니다.
OleObject oleExcel , oleQuery
long li_rc
//하나의 Excel에 저장하려는 datawindow name 과 .txt파일을 먼저 저장할 경로 지정
dw_main.SaveAs('c:\t1.txt', TEXT!, True)
dw_main.SaveAs('c:\t2.txt', TEXT!, True)
//이제 Excel 생성 - .txt로 생성한 파일을 Excel로 이동
oleExcel = Create OleObject
li_rc = oleExcel.ConnectToNewObject("excel.application")
IF li_rc <> 0 THEN
MessageBox("Information!", "File Conversion Failed!")
MessageBox('오류!', 'Excel을 구동하면서 오류가 발생했습니다.', stopsign!)
Destroy oleExcel
RETURN -1
end if
//Cell 형식 변경 - 0 (0값이 정상적으로 표현)
//숫자 0 그대로 표현되고 Cell도 문자열로 인식하여 왼쪽 정렬 상태
oleExcel.WorkBooks.Add()
oleExcel.ActiveWorkbook.Sheets.Add.Name = 't1'
oleQuery = oleExcel.ActiveWorkbook.Sheets('t1').QueryTables.Add('TEXT;c:\t1.txt' , oleExcel.ActiveWorkbook.Sheets('t1').Cells(1,1) )
oleQuery.TextFileColumnDataTypes = Array1
oleQuery.refresh()
//Cell 형식 변경 - 1 (0값 표현 안되고, 문자열로 인식)
//숫자 0 표현 안되고, Cell만 문자열로 인식하여 왼쪽 정렬 상태 (단, 아래내용보다 표기가 간단해진다.)
//oleExcel.WorkBooks.Add()
//oleExcel.ActiveWorkbook.Sheets.Add.Name = 't1'
//oleExcel.ActiveWorkbook.Sheets('t1').Range("A:Z").NumberFormatLocal = "@"
//oleQuery = oleExcel.ActiveWorkbook.Sheets('t1').QueryTables.Add('TEXT;c:\t1.txt' , oleExcel.ActiveWorkbook.Sheets('t1').Cells(1,1) )
//oleQuery.refresh()
//Cell 형식 변경 - 2 (0값 표현 안되고, 문자열로 인식)
//숫자 0 표현 안되고, Cell만 문자열로 인식하여 왼쪽 정렬 상태
//oleExcel.WorkBooks.Add()
//oleExcel.ActiveWorkbook.Sheets.Add.Name = 't1'
//oleQuery = oleExcel.ActiveWorkbook.Sheets('t1').QueryTables.Add('TEXT;c:\t1.txt' , oleExcel.ActiveWorkbook.Sheets('t1').Cells(1,1) )
//oleExcel.application.workbooks(1).worksheets(1).Range( "D:D").select
//oleExcel.application.workbooks(1).worksheets(1).Range( "D:D").NumberFormatLocal = "@"
//oleExcel.application.workbooks(1).worksheets(1).Range( "E:E").select
//oleExcel.application.workbooks(1).worksheets(1).Range( "E:E").NumberFormatLocal = "@"
//oleQuery.refresh()
//oleExcel.ActiveWorkbook.Sheets.Add.Name = 't2'
//oleQuery = oleExcel.ActiveWorkbook.Sheets('t2').QueryTables.Add('TEXT;c:\t2.txt' , oleExcel.ActiveWorkbook.Sheets('t2').Cells(1,1) )
//oleQuery.refresh()
oleExcel.Application.Visible = True
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
0번 예제는 0이 표시되고, 1번과 2번 예제는 왜 0이 표시 안되는지 보시면 아시겠지만..
Excel은 자료를 넣고난 이후에 형식지정을 해주느냐 자료를 넣기 이전에 형식지정을 해주느냐에 따라 표현되는 값이 틀려집니다.
계좌번호나 전화번호등의 정보를 입력받을 때, 처음부터 - 이라던가, 다른 문자열이 섞여들어간다면 상관없겠으나..
들어가면 안되는 경우나 입력받을때 숫자만 기입받는 경우에는 저런 문제가 생겨 버리게 되어 난감한 경우가 많이 생기게 되죠.
Excel에 저장하는 함수나 방법들을 여러가지 사용해 보았으나(경우에따라 다르겠지만), dw2xls를 이용하는 방법과 위처럼 아예 형식을
미리 지정해주고 시작하는 방법이 제일 안전하고 보기 좋은 것 같다는 생각이 드네요.
물론, 맨 앞자리에 숫자 0이 사라지지않게하기 위해서 datawindow에서 직접 Computed Field를 이용해서 표현식에 ' 라던가
특정 문자를 삽입하여 표기하는 방법도 있으나 여의치않은 상황이라면 저렇게 사용하는게 좋다고 생각하네요.
아, 참고로.. 여러개의 datawindow화면을 하나의 Excel에 Sheet별로 저장하는 방법이기도 합니다.
Test Version : 7.0.3.10009 Build