|
초짜 님이 쓰신 글 :
: 조재영 님이 쓰신 글 :
: : 필요하신 답변은 아닌거 같지만..
: :
: : 엑셀에 보면 TAB구분으로 txt파일로 저장하기가 있습니다.
: : 뭐.. 모든 정보가 넘어오는 것은 아니지만 그 txt파일을 읽고 처리하면
: : 약간의 기능은 수행할 수 있습니다..
: :
: -----------------------------------------------------------------------------------------
: 고맙습니다. 답변을 잘 받았습니다.
: 하지만 제가 원하는 답은 아니거든요. ^^a
: 물론 그러한 방법도 생각을 해 보았습니다. 뭐 얘기 듣기로는 ODBC를 사용하면 된다고 하는데
: 것두 잘 몰라서 어렵구....
: 비주얼 베이직은 같은 MS계열이니 엑셀을 뭐 주무르듯 할 수 있지만 빌더는 잘 안되더라구요.
: 그냥 엑셀파일을 열어서 각 셀의 데이터를 읽어 올 수만 있으면 되는데 말이죠.
: 쉽지가 않더라구요.
: 아무튼 고맙습니다. 계속 관심있게 이 사이트 지켜보겠습니다.
: 감사......(--)(__)
:
안녕하십니까?
한꼬맹이입니다.
먼저 님께서 비주얼베이직은 잘되는데 빌더는 잘안된다고요..
천만에 말씀입니다. 단지 님께서 아직 방법을 몰라서 그렇습니다.
원래 MS오피스계열을 다루시려면 OLE 오토메이션 서버를 다루실줄 알아야 합니다.
원래 OLE 오토메이션 서버를 비주얼베이직에서는 제대로 지원을 하지못합니다.
왜냐하면 포인터가 없어서 OLE객체를 직접 부를수가 없습니다.
그래서 MS에서 IDispatch라는 느려트지고 무식한 방법을 사용해서 비주얼베이직에서
사용하고 있는 것입니다. 그래서 비주얼베이직은 원래부터 인터프리터 언어로 출발한데다가
객체지향언어도 아닙니다. 그래서 무지하게 쉽죠.. 그러나 로레벨 코딩이나 세밀한 제어,
빠른 속력등등..은 절대로 기대할수 없습니다. 그래서 비주얼베이직에 이런 꽉 막힌 부분을
비주얼 C++이 대신 하는 것입니다.
빌더는 C++이죠.. 그래서 당연히 계발에 있었어 제약사항은 없습니다.
결론적으로 비주얼 베이직하고는 비교대상이 아닙니다. 비주얼 C++이라면 모를까?
잡설이 길었네요.. 그냥 빌더가 그만큼 좋다는 예기입니다. 자부심을 가지세요..
자 그러면 빌더에서 OLE 오토메이션제어 여러가지 방법중 제일쉬운 IDispatch인터폐이스를
이용하는 방법입니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Variant xlApp;
//Variant로 엑셀 인스턴스를 만든다.
xlApp = Variant::CreateObject("Excel.Application");
// 엑셀의 워크북 오브젝트 접근
Variant xlBooks;
xlBooks = xlApp.OlePropertyGet("Workbooks");
// 존재하는 엑셀 파일을 연다.
xlBooks.OleProcedure("Open", "c:\\Book1.xls");
// 어플리케이션 내에서 첫번째 워크북을 얻는다.
Variant xlBook = xlBooks.OlePropertyGet("Item", 1);
// 워크시트들을 관리할 수 있는 오브젝트를 얻는다.
Variant xlSheets = xlBook.OlePropertyGet("Worksheets");
// 첫번째 워크시트를 얻는다.
Variant xlSheet = xlSheets.OlePropertyGet("Item", 1);
// 셀로 작업할 경우
Variant VCell;
//셀좌표(Y, X)인 셀을 얻는다.
VCell = xlSheet.OlePropertyGet("Cells", 1, 1);
Caption = VCell.OlePropertyGet("Value"); //셀값을 읽어온다.
// 빠져나갈 때
xlBooks.OleProcedure("Close");
xlApp.OleProcedure("Quit");
}
아래의 헤더파일을 꼭 추가하세요..
#include <ComObj.hpp>
#include <UtilCls.h>
그럼 참고하세요...
|