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
[50948] Re:Re:Re:[질문]컴포넌트 사용하지 않고 엑셀 읽어오기
장성호 [nasilso] 1957 읽음    2007-10-19 14:52
[TFileStream 을 쓸때 ]

파일이 새로만들때는 아래와 같이 하지만
TFileStream *FStream = new TFileStream("c:\\e.xls", fmCreate);

이미 있는 파일을 읽어오거나 수정할때는 mOpenRead 나 fmOpenReadWrite 를 쓰셔야 합니다.
TFileStream *FStream = new TFileStream("c:\\e.xls", fmOpenRead);

* 모드  (F1 하세요)
fmCreate    Create a file with the given name. If a file with the given name exists, open the file in write mode.
fmOpenRead    Open the file for reading only.
fmOpenWrite    Open the file for writing only. Writing to the file completely replaces the current contents.
fmOpenReadWrite    Open the file to modify the current contents rather than replace them.

먼저 저장할때 는?

1. BOF 저장                                                   - 12 Byte
2. RK , Number , Label    를 반복해서 저장     - Cell Header(10~12 Byte ) + Data(4 Byte 또는 8Byte , 기타 )
3. EOF 저장                                                   - 4 BYTE
위와같은 순서가 되잖아요


Cell Header는

CXlsNumber와   CXlsRk 는 10Byte이구
CXlsLabel 은 12 Byte여서 그렇게 표현한것입다.

...

그럼..


초보 님이 쓰신 글 :
: 답변 감사합니다.
: 파일을 열어서 XlsBeginStream(Filename, 0); 후 header를 어떻게 읽어 와야 하는지
: 감이 잘 오지 않습니다.  Cell 정보를 10~12 byte 를 읽는 이유도 잘 모르겠습니다.
: ( 제가 저장한건 Column 2개, Record 갯수는 최대 50개 모두 실수로 각 Cell당 4 byte면 될거 같은데요.)
:
: Data를 읽어오는 방법에 대한 자세한 설명이나 예제를 부탁해도 될까요?
: 감사합니다.
:
:
:
:
: :   1.맨처음에 에 header인  bof 12Byte읽어오구요
: :   2.그다음부터 데이타를 파일크기만큼 읽어옵니다.
: :       데이타를 읽을때는
: :       2.1 먼저 Cell정보를 10~12Byte읽어와서 데이타 종류와 , 데이타 길이를 확인하구요
: :       2.2 데이타 길이만큼 읽어와서 int 나 double이나 string으로 변환합니다.
:
:
:
: 장성호 님이 쓰신 글 :
: : 님께서 팁게시판에 이의태님께서 올린 방법을 이용하셨네요
: : 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 이용
: :
: :
: : 그럼..
: :

+ -

관련 글 리스트
50940 [질문]컴포넌트 사용하지 않고 엑셀 읽어오기 초보 1759 2007/10/19
50945     Re:[질문]컴포넌트 사용하지 않고 엑셀 읽어오기 장성호 2379 2007/10/19
50946         Re:Re:[질문]컴포넌트 사용하지 않고 엑셀 읽어오기 초보 1750 2007/10/19
50948             Re:Re:Re:[질문]컴포넌트 사용하지 않고 엑셀 읽어오기 장성호 1957 2007/10/19
50950                 Re:Re:Re:Re:[질문]컴포넌트 사용하지 않고 엑셀 읽어오기 초보 1661 2007/10/19
50951                     Re:Re:Re:Re:Re:[질문]컴포넌트 사용하지 않고 엑셀 읽어오기 장성호 1631 2007/10/19
50953                         Re:Re:Re:Re:Re:Re:[질문]컴포넌트 사용하지 않고 엑셀 읽어오기 unitas 1419 2007/10/19
50954                             Re:Re:Re:Re:Re:Re:Re:[질문]컴포넌트 사용하지 않고 엑셀 읽어오기 장성호 1698 2007/10/19
50956                                 Re:Re:Re:Re:Re:Re:Re:Re:[감사]감사합니다. unitas 1340 2007/10/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.