C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[56593] [자답] 엑셀 셀 범위지정해서 읽어오기 (루프없이 클립보드사용)
나그네 [jieunsys] 6061 읽음    2009-04-06 10:12
자답입니다.
구글 뒤지고 뒤져서 겨우 찾았습니다
혹시나 비슷한 궁금증을 가진분이 계시면 참고하세요

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Variant xlApp, xlBooks, xlBook, xlSheets, xlSheet, vrange;

    xlApp = Variant::CreateObject("Excel.Application");
    xlApp.OlePropertySet("Visible",true);
    xlBooks = xlApp.OlePropertyGet("Workbooks");
    xlBooks.OleProcedure("Open", "c:TEST.xls");

    xlBook = xlBooks.OlePropertyGet("Item", 1);
    xlSheets = xlBook.OlePropertyGet("Worksheets");
    xlSheet = xlSheets.OlePropertyGet("Item", 1);  //첫번째시트

    vrange=xlSheet.OlePropertyGet("Range","A3:C65535"); // 범위지정
    vrange.OleProcedure("Select"); // 선택 (범위지정한 부분이 선택됨)
    xlApp.OlePropertyGet("Selection").OleProcedure("Copy"); // 복사 (클립보드로 복사됨)
                // 클립보드 사용

    xlApp.OlePropertySet("DisplayAlerts",false);  // 경고창 없애기
    xlBooks.OleProcedure("Close");
    xlApp.OleProcedure("Quit");

}
이후는 클립보드에 있는걸 꺼내서 사용하면 됩니다.
엑셀에 대량을 넣을때에도 반대로 하면 될거 같습니다.
좋은 하루 되세요
//---------------------------------------------------------------------------




나그네 님이 쓰신 글 :
: OLE관련 함수들이 델파이랑 빌더랑 많이 틀려서 변환을 할수가 없네요
: 동일하게 변환이 아니더라도, 참조할수 있는 정보만이라도 리플 달아주시면 감사하겠습니다.
: 목적은 엑셀 대량의 셀을 빠르게 읽어오려고 합니다. 단순 루프로는 무지하게 느려서 쓸수가 없어요...
:
: 아니면 해당시트를 CSV나 TXT로 저장할 수 있는 함수명이라도 알려주시면 더욱 감사하겠습니다.
: 차라리 csv로 저장해서 씨함수로 읽어버리는게 천배는 빠를거 같습니다.
:
: var
:   xls, wb, Range: OLEVariant;
:   arrData: Variant;
: begin
:   {create variant array where we'll copy our data}
:   arrData := VarArrayCreate([1, yourStringGrid.RowCount, 1, yourStringGrid.ColCount], varVariant);
:
:   {fill array}
:   for i := 1 to yourStringGrid.RowCount do
:     for j := 1 to yourStringGrid.ColCount do
:       arrData[i, j] := yourStringGrid.Cells[j-1, i-1];
:
:   {initialize an instance of Excel}
:   xls := CreateOLEObject('Excel.Application');
:
:   {create workbook}
:   wb := xls.Workbooks.Add;
:
:   {retrieve a range where data must be placed}
:   Range := wb.WorkSheets[1].Range[wb.WorkSheets[1].Cells[1, 1],
:                                   wb.WorkSheets[1].Cells[yourStringGrid.RowCount, yourStringGrid.ColCount]];
:
:   {copy data from allocated variant array}
:   Range.Value := arrData;
:
:   {show Excel with our data}
:   xls.Visible := True;
: end;

+ -

관련 글 리스트
56574 엑셀 범위 지정 델파이코드를 빌더로 변환 좀 부탁드려요 ㅜㅜ 나그네 2649 2009/04/02
56593     [자답] 엑셀 셀 범위지정해서 읽어오기 (루프없이 클립보드사용) 나그네 6061 2009/04/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.