님께서 팁게시판에 이의태님께서 올린 방법을 이용하셨네요
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=201
그 방법의 장점은
1. Excel이 없어도 데이타를 저장할수 있다는것입니다.
하지만 단점은?
1. 지원하는 Data형식이 String , int , float 세가지 뿐이라는것
2. Sheet가 2장 이상은 안된다는것
3. 그리고 무엇보다 Excel 프로그램에서 저장한 데이타는 같은 방식으로 읽을 수 없다는것 등이 있습니다.
하지만 위 방법으로 저장한 xls파일은 write할때 방식으로 read하면 되겠죠
WORD CXlsBof[6] = {0x809, 8, 0, 0x10, 0, 0};
WORD CXlsEof[2] = {0x0A, 0};
WORD CXlsLabel[6] = {0x204, 0, 0, 0, 0, 0};
WORD CXlsNumber[5] = {0x203, 14, 0, 0, 0};
WORD CXlsRk[5] = {0x27E, 10, 0, 0, 0};
[위방식으로 저장한 xls파일 읽기]
1.맨처음에 에 header인 bof 12Byte읽어오구요
2.그다음부터 데이타를 파일크기만큼 읽어옵니다.
데이타를 읽을때는
2.1 먼저 Cell정보를 10~12Byte읽어와서 데이타 종류와 , 데이타 길이를 확인하구요
2.2 데이타 길이만큼 읽어와서 int 나 double이나 string으로 변환합니다.
3. 2번과정을 file길이만큼 반복하다가
데이타 타입니 eof이면 끝내면 됩니다.
직접 코딩해 보시고 안되면.. 다시 질문올리세요
-추신-
아래 링크에 excel파일 저장하는 몇가지 방법이 기술되어있습니다.
그중 1번은 님이 지금 하시는 방법이구요
1번 ,2번 ,4번 , 5번이 excel이 pc에 설치되어있지 않아도 저장및 읽어오는 기능이 됩니다.
문론 한계는 있습니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=50156
[Excel 저장방법]
1. 직접 바이너리저장
2. XML 스프레드시트
3. OLE 이용
4. CSV 로 저장
5. 탭구분 TEXT파일로 저장
6. 엑셀 지원 StringGrid 이용
그럼..
초보 님이 쓰신 글 :
: 엑셀에 저장시 아래의 팁으로 저장을 했습니다.
: 저장한 내용을 다시 읽어 오려고 하는데 컴포넌트 사용하지 않고 읽어오려면
: 어떻게 해야 하는지요? 아래의 팁을 변형해서 읽어 올수가 있나요?
:
: WORD CXlsBof[6] = {0x809, 8, 0, 0x10, 0, 0};
: WORD CXlsEof[2] = {0x0A, 0};
: WORD CXlsLabel[6] = {0x204, 0, 0, 0, 0, 0};
: WORD CXlsNumber[5] = {0x203, 14, 0, 0, 0};
: WORD CXlsRk[5] = {0x27E, 10, 0, 0, 0};
:
: void __fastcall XlsBeginStream(TStream *XlsStream, const WORD BuildNumber)
: {
: CXlsBof[4] = BuildNumber;
: XlsStream->WriteBuffer(CXlsBof, sizeof(CXlsBof));
: }
: ... 중략.
: void __fastcall XlsWriteCellLabel(TStream *XlsStream, const WORD ACol, const
: WORD ARow, const AnsiString AValue)
: {
: WORD L = AValue.Length();
: CXlsLabel[1] = 8 + L;
: CXlsLabel[2] = ARow;
: CXlsLabel[3] = ACol;
: CXlsLabel[5] = L;
: XlsStream->WriteBuffer(CXlsLabel, sizeof(CXlsLabel));
: XlsStream->WriteBuffer(AValue.c_str(), L);
: }