자답입니다.
구글 뒤지고 뒤져서 겨우 찾았습니다
혹시나 비슷한 궁금증을 가진분이 계시면 참고하세요
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;
|