음..
개요
엑셀파일 내용 가져오는 방법에 대한 질문이 종종 올라오곤 해서
한번 만들어 보았습니다.
특정Cell의 내용을 하나씩 읽어오는 방법이 아니라
Sheet전체를 선택해 Clipboard로 copy해서 읽어오는 방법입니다.
다음 링크를 참조했구요
약간 보완 수정되었습니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=56593
코드
#include "ClipBrd.hpp"
void __fastcall TForm6::Button3Click(TObject *Sender)
{
if(OpenDialog1->Execute(Handle))
{
Variant xlApp, xlBooks, xlBook, xlSheets, xlSheet, vrange;
xlApp = Variant::CreateObject("Excel.Application");
try
{
xlApp.OlePropertySet("Visible",false);//Desktop에 보여줄지 여부 결정
xlBooks = xlApp.OlePropertyGet("Workbooks");
AnsiString sFName=OpenDialog1->FileName;
xlBooks.OleProcedure("Open", sFName.c_str());
xlBook = xlBooks.OlePropertyGet("Item", 1); //여러개의 문서중 첫번째 문서 선택
xlSheets = xlBook.OlePropertyGet("Worksheets");
xlSheet = xlSheets.OlePropertyGet("Item", 1); //Workbook의 첫번째시트 선택
xlSheet.OleProcedure("Select"); //선택한 Sheet를 Active시킴 (다른 Sheet가 active되었을때 Select가 오동작)
// vrange=xlSheet.OlePropertyGet("Range","A3:C65535"); // 범위지정 1
vrange=xlSheet.OlePropertyGet("Cells"); // 범위지정 2
vrange.OleProcedure("Select"); // 선택 (범위지정한 부분이 선택됨)
xlApp.OlePropertyGet("Selection").OleProcedure("Copy"); // 복사 (클립보드로 복사됨)
Memo1->Lines->Text=Clipboard()->AsText; //Clipboard의 내용을 TMemo로 읽어옴
xlApp.OlePropertySet("DisplayAlerts",false); // 경고창 없애기
xlBooks.OleProcedure("Close");
}
__finally
{
xlApp.OleProcedure("Quit");
}
}
}
//---------------------------------------------------------------------------
장점은?
이 방법의 장점은
Cell 하나씩 읽어오는것보다 조금 빠르지 않을까 하는 생각이 듭니다.
단점은?
단점도 많이 있을듯...
그럼..
|