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
[63898] 팁게시판의 엑셀 저장 소스를 이용했는데, 에러가 납니다..
용맨소녀 [doyongid] 1619 읽음    2011-03-09 11:06
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=201
여기 링크의 방법을 이용했는데요..

저장은 잘되는데, 엑셀2010에서 불러오기를 하면 "손상된 파일"이라고 뜹니다..
무엇이 문제일까요?

다시 확인해보니 링크된 소스 그대로 해도 손상된 파일이라고 뜨네요..;;

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 XlsEndStream(TStream *XlsStream)
{
    XlsStream->WriteBuffer(CXlsEof, sizeof(CXlsEof));
}

void __fastcall XlsWriteCellRk(TStream *XlsStream, const WORD ACol, const WORD ARow, const int AValue)
{
	CXlsRk[2] = ARow;
	CXlsRk[3] = ACol;
	XlsStream->WriteBuffer(CXlsRk, sizeof(CXlsRk));
	int V = ((AValue << 2) | 2);
	XlsStream->WriteBuffer(&V, 4);
}

void __fastcall XlsWriteCellNumber(TStream *XlsStream, const WORD ACol, const WORD ARow, const double AValue)
{
	CXlsNumber[2] = ARow;
	CXlsNumber[3] = ACol;
	XlsStream->WriteBuffer(CXlsNumber, sizeof(CXlsNumber));
	XlsStream->WriteBuffer(&AValue, 8);
}

// AnsiString -> String으로 임의로 수정했습니다. 요거때문인지..;;;
void __fastcall XlsWriteCellLabel(TStream *XlsStream, const WORD ACol, const WORD ARow, String 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.t_str(), L);

void __fastcall TWin_Main::Menu_SaveExcelClick(TObject *Sender)
{
  TListItem	*lpItem;

	if(Save_Excel->Execute())
	{
		TFileStream *FStream = new TFileStream(Save_Excel->FileName, fmCreate);

		__try
		{
			XlsBeginStream(FStream, 0);

			for(int i = 0; i < ListView->Items->Count; i++)
			{
				lpItem	= ListView->Items->Item[i];

				XlsWriteCellLabel(FStream, 0, i, lpItem->Caption);

				for(int j = 0; j < ListView->Columns->Count - 1; j++)
					XlsWriteCellLabel(FStream, j + 1, i, lpItem->SubItems->Strings[j]);
			}

			XlsEndStream(FStream);
		}
		__finally
		{
			delete FStream;
		}
	}
}

+ -

관련 글 리스트
63898 팁게시판의 엑셀 저장 소스를 이용했는데, 에러가 납니다.. 용맨소녀 1619 2011/03/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.