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;
}
}
}