Q&A

  • EXcel변환시 문자,숫자 분리


Stringgird의 data를 Excel로 변환할 때

문자열 지정을 하지 않으면 전체가 숫자로 인식되고,

(예: 사원번호 '00104'가 숫자 104로 인식)

문자열 지정을 하면 전체가 문자열로 인식되어 Excel에서

data를 활용할 수가 없습니다.

(예: 아래처럼 할 경우 2,3번 Columns은 문자열로 인식 됨)

아시는분의 도움을 기다립니다.



Excel := CreateOleObject('Excel.Application') ;

Excel.WorkBooks.add;

Excel.WorkSheets[1].name := 'test';

ColumnRange := Excel.Workbooks[1].WorkSheets['test'].Columns ;

ColumnRange.Columns[1].Style.NumberFormatLocal := '@' ; //문자 인식

// 1번Column만 문자인식 필요

for cnt_1 := 1 to cnt_2

begin

Excel.Cells[cnt_1, 1].Value := 문자 DATA;

Excel.Cells[cnt_1, 2].Value := 숫자 DATA;

Excel.Cells[cnt_1, 3].Value := 숫자 DATA;

end;



Excel.Columns.AutoFit ;

Excel.Visible := true ;

Excel.DisplayAlerts := false ;

ProgressBar1.Position := 0;



4  COMMENTS
  • Profile
    한하눌 2000.10.18 19:05
    청강생 wrote:

    >

    > Stringgird의 data를 Excel로 변환할 때

    > 문자열 지정을 하지 않으면 전체가 숫자로 인식되고,

    > (예: 사원번호 '00104'가 숫자 104로 인식)

    > 문자열 지정을 하면 전체가 문자열로 인식되어 Excel에서

    > data를 활용할 수가 없습니다.

    > (예: 아래처럼 할 경우 2,3번 Columns은 문자열로 인식 됨)

    > 아시는분의 도움을 기다립니다.

    >

    > Excel := CreateOleObject('Excel.Application') ;

    > Excel.WorkBooks.add;

    > Excel.WorkSheets[1].name := 'test';

    > ColumnRange := Excel.Workbooks[1].WorkSheets['test'].Columns ;

    > ColumnRange.Columns[1].Style.NumberFormatLocal := '@' ; //문자 인식

    > // 1번Column만 문자인식 필요

    > for cnt_1 := 1 to cnt_2

    > begin

    > Excel.Cells[cnt_1, 1].Value := 문자 DATA;

    > Excel.Cells[cnt_1, 2].Value := 숫자 DATA;

    > Excel.Cells[cnt_1, 3].Value := 숫자 DATA;

    > end;

    >

    > Excel.Columns.AutoFit ;

    > Excel.Visible := true ;

    > Excel.DisplayAlerts := false ;



    > ProgressBar1.Position := 0;

    전송이 끝난뒤에 부분적으로 타입을 다시지정하면 어떨까요?

    for cnt_1 := 1 to cnt_2

    begin

    Excel.Cells[cnt_1, 1].Value := 문자 DATA;

    Excel.Cells[cnt_1, 2].Value := 숫자 DATA;

    Excel.Cells[cnt_1, 3].Value := 숫자 DATA;

    end;



    EXCEL.columns['B:C'].select;

    EXCEL.selection.NumberFormatLocal := '0_ ';



    Excel.Columns.AutoFit ;

    Excel.Visible := true ;

    Excel.DisplayAlerts := false ;

    ProgressBar1.Position := 0;



  • Profile
    청강생 2000.10.18 20:23
    한하눌 wrote:

    > 청강생 wrote:

    > >

    > > Stringgird의 data를 Excel로 변환할 때

    > > 문자열 지정을 하지 않으면 전체가 숫자로 인식되고,

    > > (예: 사원번호 '00104'가 숫자 104로 인식)

    > > 문자열 지정을 하면 전체가 문자열로 인식되어 Excel에서

    > > data를 활용할 수가 없습니다.

    > > (예: 아래처럼 할 경우 2,3번 Columns은 문자열로 인식 됨)

    > > 아시는분의 도움을 기다립니다.

    > >

    > > Excel := CreateOleObject('Excel.Application') ;

    > > Excel.WorkBooks.add;

    > > Excel.WorkSheets[1].name := 'test';

    > > ColumnRange := Excel.Workbooks[1].WorkSheets['test'].Columns ;

    > > ColumnRange.Columns[1].Style.NumberFormatLocal := '@' ; //문자 인식

    > > // 1번Column만 문자인식 필요

    > > for cnt_1 := 1 to cnt_2

    > > begin

    > > Excel.Cells[cnt_1, 1].Value := 문자 DATA;

    > > Excel.Cells[cnt_1, 2].Value := 숫자 DATA;

    > > Excel.Cells[cnt_1, 3].Value := 숫자 DATA;

    > > end;

    > >

    > > Excel.Columns.AutoFit ;

    > > Excel.Visible := true ;

    > > Excel.DisplayAlerts := false ;

    >

    > > ProgressBar1.Position := 0;

    > 전송이 끝난뒤에 부분적으로 타입을 다시지정하면 어떨까요?

    > for cnt_1 := 1 to cnt_2

    > begin

    > Excel.Cells[cnt_1, 1].Value := 문자 DATA;

    > Excel.Cells[cnt_1, 2].Value := 숫자 DATA;

    > Excel.Cells[cnt_1, 3].Value := 숫자 DATA;

    > end;

    >

    > EXCEL.columns['B:C'].select;

    > EXCEL.selection.NumberFormatLocal := '0_ ';

    >

    > Excel.Columns.AutoFit ;

    > Excel.Visible := true ;

    > Excel.DisplayAlerts := false ;

    > ProgressBar1.Position := 0;

    >



    == 감사합니다 ==

    덕분에 힌트를 얻어 다른 자료도 찾고 해서 몇가지 방법을 사용해 보았습니다만

    EXCEL에서는 사용자정의로 인식하여 지정한 서식으로 뿌려 주지만, 그 DATA를

    이용한 EXCEL의 특징인 계산(집계, 평균 등) 기능을 사용할 수 없습니다.

    저의 문제는 EXCEL로 만들어진 FILE을 별도의 수정없이(양식, 색상, 배경 등은

    알아서 사용 하겠지만) EXCEL에서 활용할 수 있는 방법 입니다.



    for jj := 5 to 9 do

    begin

    EXCEL.columns[jj].select;

    Excel.Selection.NumberFormatLocal := '0_;';

    end;



    EXCEL.columns[10].select;

    Excel.Selection.NumberFormatLocal := '0.00_;[빨강]-0.00';



    혹시 이런 방법은 없는지요 ?

    EXCEL.columns[10].select;

    Excel.Selection.표시형식 := 숫자,문자, 통화, ,삽입,소수이하2자리 ..

    Excel.Selection.맞춤 := 표준,왼쪽,오른쪽 ...

    Excel.Selection.글꼴 := 돋움체, 굴림체 ...

    .

    .



    무식하면 용감하다고 하던가요 ???









  • Profile
    한하눌 2000.10.19 06:52
    청강생 wrote:

    > 한하눌 wrote:

    > > 청강생 wrote:

    > > >

    > > > Stringgird의 data를 Excel로 변환할 때

    > > > 문자열 지정을 하지 않으면 전체가 숫자로 인식되고,

    > > > (예: 사원번호 '00104'가 숫자 104로 인식)

    > > > 문자열 지정을 하면 전체가 문자열로 인식되어 Excel에서

    > > > data를 활용할 수가 없습니다.

    > > > (예: 아래처럼 할 경우 2,3번 Columns은 문자열로 인식 됨)

    > > > 아시는분의 도움을 기다립니다.

    > > >

    > > > Excel := CreateOleObject('Excel.Application') ;

    > > > Excel.WorkBooks.add;

    > > > Excel.WorkSheets[1].name := 'test';

    > > > ColumnRange := Excel.Workbooks[1].WorkSheets['test'].Columns ;

    > > > ColumnRange.Columns[1].Style.NumberFormatLocal := '@' ; //문자 인식

    > > > // 1번Column만 문자인식 필요

    > > > for cnt_1 := 1 to cnt_2

    > > > begin

    > > > Excel.Cells[cnt_1, 1].Value := 문자 DATA;

    > > > Excel.Cells[cnt_1, 2].Value := 숫자 DATA;

    > > > Excel.Cells[cnt_1, 3].Value := 숫자 DATA;

    > > > end;

    > > >

    > > > Excel.Columns.AutoFit ;

    > > > Excel.Visible := true ;

    > > > Excel.DisplayAlerts := false ;

    > >

    > > > ProgressBar1.Position := 0;

    > > 전송이 끝난뒤에 부분적으로 타입을 다시지정하면 어떨까요?

    > > for cnt_1 := 1 to cnt_2

    > > begin

    > > Excel.Cells[cnt_1, 1].Value := 문자 DATA;

    > > Excel.Cells[cnt_1, 2].Value := 숫자 DATA;

    > > Excel.Cells[cnt_1, 3].Value := 숫자 DATA;

    > > end;

    > >

    > > EXCEL.columns['B:C'].select;

    > > EXCEL.selection.NumberFormatLocal := '0_ ';

    > >

    > > Excel.Columns.AutoFit ;

    > > Excel.Visible := true ;

    > > Excel.DisplayAlerts := false ;

    > > ProgressBar1.Position := 0;

    > >

    >

    > == 감사합니다 ==

    > 덕분에 힌트를 얻어 다른 자료도 찾고 해서 몇가지 방법을 사용해 보았습니다만

    > EXCEL에서는 사용자정의로 인식하여 지정한 서식으로 뿌려 주지만, 그 DATA를

    > 이용한 EXCEL의 특징인 계산(집계, 평균 등) 기능을 사용할 수 없습니다.

    > 저의 문제는 EXCEL로 만들어진 FILE을 별도의 수정없이(양식, 색상, 배경 등은

    > 알아서 사용 하겠지만) EXCEL에서 활용할 수 있는 방법 입니다.

    >

    > for jj := 5 to 9 do

    > begin

    > EXCEL.columns[jj].select;

    > Excel.Selection.NumberFormatLocal := '0_;';

    > end;

    >

    > EXCEL.columns[10].select;

    > Excel.Selection.NumberFormatLocal := '0.00_;[빨강]-0.00';

    >

    > 혹시 이런 방법은 없는지요 ?

    > EXCEL.columns[10].select;

    > Excel.Selection.표시형식 := 숫자,문자, 통화, ,삽입,소수이하2자리 ..

    > Excel.Selection.맞춤 := 표준,왼쪽,오른쪽 ...

    > Excel.Selection.글꼴 := 돋움체, 굴림체 ...

    > .

    > .

    >

    > 무식하면 용감하다고 하던가요 ???

    >

    >

    >

    >

    대답이 늦어서 죄송합니다.

    저도 목구멍이 포도청이라 ...



    합계를 넣는데도 별이상이 없는데요 ...

    도움이 되었으면 좋겠는데..



    procedure TForm1.Button1Click(Sender: TObject);

    var

    excel : variant;

    i : integer;

    begin

    excel := createoleobject('excel.application');

    excel.visible := true;

    excel.workbooks.add;

    for i := 1 to 10 do

    begin

    excel.cells[i,1].formula := inttostr(i);

    end;

    excel.cells[i,1].formula := '=sum(a1..a9)'; // 합계를 넣는데 별 문제 없는데...

    end;



  • Profile
    청강생 2000.10.20 17:33
    한하눌 wrote:

    > 청강생 wrote:

    > > 한하눌 wrote:

    > > > 청강생 wrote:

    > > > >

    > > > > Stringgird의 data를 Excel로 변환할 때

    > > > > 문자열 지정을 하지 않으면 전체가 숫자로 인식되고,

    > > > > (예: 사원번호 '00104'가 숫자 104로 인식)

    > > > > 문자열 지정을 하면 전체가 문자열로 인식되어 Excel에서

    > > > > data를 활용할 수가 없습니다.

    > > > > (예: 아래처럼 할 경우 2,3번 Columns은 문자열로 인식 됨)

    > > > > 아시는분의 도움을 기다립니다.

    > > > >

    > > > > Excel := CreateOleObject('Excel.Application') ;

    > > > > Excel.WorkBooks.add;

    > > > > Excel.WorkSheets[1].name := 'test';

    > > > > ColumnRange := Excel.Workbooks[1].WorkSheets['test'].Columns ;

    > > > > ColumnRange.Columns[1].Style.NumberFormatLocal := '@' ; //문자 인식

    > > > > // 1번Column만 문자인식 필요

    > > > > for cnt_1 := 1 to cnt_2

    > > > > begin

    > > > > Excel.Cells[cnt_1, 1].Value := 문자 DATA;

    > > > > Excel.Cells[cnt_1, 2].Value := 숫자 DATA;

    > > > > Excel.Cells[cnt_1, 3].Value := 숫자 DATA;

    > > > > end;

    > > > >

    > > > > Excel.Columns.AutoFit ;

    > > > > Excel.Visible := true ;

    > > > > Excel.DisplayAlerts := false ;

    > > >

    > > > > ProgressBar1.Position := 0;

    > > > 전송이 끝난뒤에 부분적으로 타입을 다시지정하면 어떨까요?

    > > > for cnt_1 := 1 to cnt_2

    > > > begin

    > > > Excel.Cells[cnt_1, 1].Value := 문자 DATA;

    > > > Excel.Cells[cnt_1, 2].Value := 숫자 DATA;

    > > > Excel.Cells[cnt_1, 3].Value := 숫자 DATA;

    > > > end;

    > > >

    > > > EXCEL.columns['B:C'].select;

    > > > EXCEL.selection.NumberFormatLocal := '0_ ';

    > > >

    > > > Excel.Columns.AutoFit ;

    > > > Excel.Visible := true ;

    > > > Excel.DisplayAlerts := false ;

    > > > ProgressBar1.Position := 0;

    > > >

    > >

    > > == 감사합니다 ==

    > > 덕분에 힌트를 얻어 다른 자료도 찾고 해서 몇가지 방법을 사용해 보았습니다만

    > > EXCEL에서는 사용자정의로 인식하여 지정한 서식으로 뿌려 주지만, 그 DATA를

    > > 이용한 EXCEL의 특징인 계산(집계, 평균 등) 기능을 사용할 수 없습니다.

    > > 저의 문제는 EXCEL로 만들어진 FILE을 별도의 수정없이(양식, 색상, 배경 등은

    > > 알아서 사용 하겠지만) EXCEL에서 활용할 수 있는 방법 입니다.

    > >

    > > for jj := 5 to 9 do

    > > begin

    > > EXCEL.columns[jj].select;

    > > Excel.Selection.NumberFormatLocal := '0_;';

    > > end;

    > >

    > > EXCEL.columns[10].select;

    > > Excel.Selection.NumberFormatLocal := '0.00_;[빨강]-0.00';

    > >

    > > 혹시 이런 방법은 없는지요 ?

    > > EXCEL.columns[10].select;

    > > Excel.Selection.표시형식 := 숫자,문자, 통화, ,삽입,소수이하2자리 ..

    > > Excel.Selection.맞춤 := 표준,왼쪽,오른쪽 ...

    > > Excel.Selection.글꼴 := 돋움체, 굴림체 ...

    > > .

    > > .

    > >

    > > 무식하면 용감하다고 하던가요 ???

    > >

    > >

    > >

    > >

    > 대답이 늦어서 죄송합니다.

    > 저도 목구멍이 포도청이라 ...

    >

    > 합계를 넣는데도 별이상이 없는데요 ...

    > 도움이 되었으면 좋겠는데..

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > excel : variant;

    > i : integer;

    > begin

    > excel := createoleobject('excel.application');

    > excel.visible := true;

    > excel.workbooks.add;

    > for i := 1 to 10 do

    > begin

    > excel.cells[i,1].formula := inttostr(i);

    > end;

    > excel.cells[i,1].formula := '=sum(a1..a9)'; // 합계를 넣는데 별 문제 없는데...

    > end;

    >



    감사합니다.



    하지만 저의 질문이 부족하여, 정확한 답을 주실 수 없었던것 같습니다.

    제가 DELPHI에서 EXCEL로 자료를 변환 하는 것은 EXCEL의 고유한 특징(계산, Chart..)들을 이용하기 위해서 입니다.



    물론 DELPHI프로그램에서도 왠만한 작업은 다 할 수 있습니다만, 사용자의

    특성상 인쇄양식, CHART의 모양, 계산기준의 변경 등 여러 가지로 작업을 원할 수 있겠지요.



    이런 개인적인 취향을 모두 다 지원할 수는 없기에 DELPHI에서는 표준화된 FORMAT으로 자료를 만들고, 그것을 일반 사용자가 자신의 필요에 의해 재가공 하는 방법을 찾고 있습니다.



    현재는 문자형 DATA의 앞에 '"'를 붙여서 EXCEL화 작업을 하지만, EXCEL에서

    '"'를 없애는 작업도 보통이 아니더군요.



    다른 분들은 이 문제가 없는지, 아니면 EXCEL변환으로 만족하시는지

    Q&A, 강의실 등 관련 자료를 뒤져보아도, 이 문제의 해결 방법은 없었습니다.



    참고로, 지금 저희는 UNIX O/S, INFORMIX D/B, Informix 4GL, Delphi 4.0 을 사용하고 있습니다.



    혹시 방법을 아신다면 도움을 바랍니다.





    • 이성훈
      2000.10.25 02:32
      초보개발자 wrote: > 공장자동화 라인에서 사용하는 컴이 도스용인데..여기에 델파이5.0으로 > 만든 프로...
    • 초보자
    • 2000.10.18 20:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 강인규
      2000.10.19 00:18
      디테일밴드가 한장을 넘어가면 그런 일이 생기기도 합니다. 디테일밴드를 줄여보세요. 즐프하세여~ ^-^ ...
    • 호야
    • 2000.10.18 19:42
    • 0 COMMENTS
    • /
    • 0 LIKES
    • raeganja
    • 2000.10.18 19:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 강인규
      2000.10.18 20:01
      자동증가 있는데염. 파라독스라면 FieldType에 AutoInc가 있구요..... MS-SQL은 프라이머리키로 설정하시...
    • 초보자
    • 2000.10.18 19:20
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 임형호
      2000.10.18 21:48
      데이타가 보이지 않는다는것이 무슨 의미인지요? 설정을 했는데.... 해당 데이타가 DBLookupcombobox에 나...
    • 초보자
      2000.10.18 22:20
      dblookupcombobox에 설정을 다해주면 데이타가 주욱 나오잖아여,, 거기서 하나를 선택하면 내가 선택한게 ...
    • 임성룡
    • 2000.10.18 19:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김정
      2000.10.18 19:35
      안녕하세요? 고드름 김정입니다. 패키지 프로젝트를 여시고, 해당 유닛을 제거하시고 다시 인스톨하시...
    • 김정
      2000.10.18 19:34
      안녕하세요? 고드름 김정입니다. Video for windows API 중에서 capGetDriverDescription() 라는 함...
    • 한승구
      2000.10.19 04:37
      김정 wrote: > 안녕하세요? > 고드름 김정입니다. > > Video for windows API 중에서 > > capGetDr...
    • 김정
      2000.10.19 06:34
      안녕하세요? 고드름 김정입니다. 제가 선언부를 적지 않았더군요. 이렇게 바꾸세요. 그럼. var nTem...
    • 한승구
      2000.10.19 19:45
      김정 wrote: > 안녕하세요? > 고드름 김정입니다. > > 제가 선언부를 적지 않았더군요. 이렇게 바꾸세...
    • 청강생
    • 2000.10.18 18:48
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 한하눌
      2000.10.18 19:05
      청강생 wrote: > > Stringgird의 data를 Excel로 변환할 때 > 문자열 지정을 하지 않으면 전체가 숫자...
    • 청강생
      2000.10.18 20:23
      한하눌 wrote: > 청강생 wrote: > > > > Stringgird의 data를 Excel로 변환할 때 > > 문자열 지정을 ...
    • 한하눌
      2000.10.19 06:52
      청강생 wrote: > 한하눌 wrote: > > 청강생 wrote: > > > > > > Stringgird의 data를 Excel로 변환할 ...
    • 청강생
      2000.10.20 17:33
      한하눌 wrote: > 청강생 wrote: > > 한하눌 wrote: > > > 청강생 wrote: > > > > > > > > Stringgird...
    • parkisu
      2000.10.19 11:47
    • cell
      2000.10.19 02:05
    • 임형호
      2000.10.18 18:58
    • 2000.10.18 19:35
    • 한하눌
      2000.10.18 19:49
    • 2000.10.18 20:02
    • 임형호
      2000.10.18 21:47
    • 한하눌
      2000.10.18 19:41
      이해경 wrote: > 안녕하세요? Delphi에서 Excel로 보고서를 출력하는 작업을 하고 있으며, Error가 발생하...
    • 이해경
      2000.10.18 20:45
      답변 감사합니다. 그렇게 하니까 Process는 종료가 되었습니다. 하지만 Process 종료시 저장 여부를 물어...
    • 델초
    • 2000.10.18 13:40
    • 2 COMMENTS
    • /
    • 0 LIKES
    • parkisu
      2000.10.18 16:27
      폼이 메모리상에서 완전히 제거되지 않은 것 같은데요. FAddForm의 OnClose이벤트에 FAddForm:= nil...
    • 델초
      2000.10.18 22:13
      parkisu wrote: > 폼이 메모리상에서 완전히 제거되지 않은 것 같은데요. > FAddForm의 OnClose이벤트에 ...
    • parkisu
      2000.10.18 16:20
      MS엑세스같은 것들이 그런 프로그램입니다. 아마도 C나 C++로 만들어진 프로그램들에서 주로 그런 것 같아...
    • 2000.10.18 18:15
      http://www.delphi.co.kr/cgi-bin/cwb/CrazyWWWBoard.cgi?db=freetalk&mode=download&num=3290&file=Projec...
    • 김경한
    • 2000.10.18 11:17
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 강인규
      2000.10.18 18:54
      음.... 잘 모르지만 한자 적어봅니다. ^-^; 디비의 자료를 읽어오는 방법이 BDE세팅이나 ODBC설정 뿐일...
    • 권영길
      2000.10.18 11:29
      "Provider=SQLOLEDB;Connect Timeout=7;SERVER=MYSERVER;UID=MYUSER;PWD=MYPASS;DATABASE=MYDB" 이런식이...
    • psunk
    • 2000.10.18 06:54
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김정
      2000.10.18 08:18
      안녕하세요? 고드름 김정입니다. Type Library에서 속성을 만드신 후, (데이터타입을 결정하고 ...) U...
    • psunk
      2000.10.18 08:48
      답변 감사합니다. Type Library 에는 등록이 모두 되어있습니다. 그런데도 액티브 폼에서 그 프로퍼티를 ...
    • 김정
      2000.10.18 19:15
      안녕하세요? 고드름 김정입니다. 말씀하신 것까지는 맞습니다. 하지만 Type Library에서 만든 것은 In...
    • 허준
      2000.10.18 19:06
      windows 2000 Professional에는 SQL7.0 서버를 깔수가 없습니다. windows 2000 Professional은 NT WORKSTA...
    • 인디안
    • 2000.10.18 04:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김정
      2000.10.18 08:20
      안녕하세요? 고드름 김정입니다. 질문하신 내용이, 델에서 GIF저장을 하셨다는 것인지 저장된 것을 보...