Показать сообщение отдельно
Старый 25.09.2005, 16:02     # 7
crazydown
Guest
 
Сообщения: n/a

есть еще способ:

Создаём Excel файл без OLE
Код:
const  
  CXlsBof: array[0..5] of Word = ($809, 8, 00, $10, 0, 0);  
  CXlsEof: array[0..1] of Word = ($0A, 00);  
  CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);  
  CXlsNumber: array[0..4] of Word = ($203, 14, 0, 0, 0);  
  CXlsRk: array[0..4] of Word = ($27E, 10, 0, 0, 0);  

procedure XlsBeginStream(XlsStream: TStream; const BuildNumber: Word);  
begin  
  CXlsBof[4] := BuildNumber;  
  XlsStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));  
end;  

procedure XlsEndStream(XlsStream: TStream);  
begin  
  XlsStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));  
end;  

procedure XlsWriteCellRk(XlsStream: TStream; const ACol, ARow: Word;  
  const AValue: Integer);  
var  
  V: Integer;  
begin  
  CXlsRk[2] := ARow;  
  CXlsRk[3] := ACol;  
  XlsStream.WriteBuffer(CXlsRk, SizeOf(CXlsRk));  
  V := (AValue shl 2) or 2;  
  XlsStream.WriteBuffer(V, 4);  
end;  

procedure XlsWriteCellNumber(XlsStream: TStream; const ACol, ARow: Word;  
  const AValue: Double);  
begin  
  CXlsNumber[2] := ARow;  
  CXlsNumber[3] := ACol;  
  XlsStream.WriteBuffer(CXlsNumber, SizeOf(CXlsNumber));  
  XlsStream.WriteBuffer(AValue, 8);  
end;  

procedure XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word;  
  const AValue: string);  
var  
  L: Word;  
begin  
  L := Length(AValue);  
  CXlsLabel[1] := 8 + L;  
  CXlsLabel[2] := ARow;  
  CXlsLabel[3] := ACol;  
  CXlsLabel[5] := L;  
  XlsStream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));  
  XlsStream.WriteBuffer(Pointer(AValue)^, L);  
end;  

procedure TForm1.Button1Click(Sender: TObject);  
var  
  FStream: TFileStream;  
  I, J: Integer;  
begin  
  FStream := TFileStream.Create('c:\e.xls', fmCreate);  
  try  
    XlsBeginStream(FStream, 0);  
    for I := 0 to 99 do  
      for J := 0 to 99 do  
      begin  
        XlsWriteCellNumber(FStream, I, J, 34.34);  
        // XlsWriteCellRk(FStream, I, J, 3434);  
        // XlsWriteCellLabel(FStream, I, J, Format('Cell: %d,%d', [I, J]));  
      end;  
    XlsEndStream(FStream);  
  finally  
    FStream.Free;  
  end;  
end;
Взято из Delphi Russian Knowledge Base, http://forum.vingrad.ru/