- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 Forum

Grundkurs
  »Introduktion
  »Snabbguide
  »Komponenter
  »Händelser
  »Strängar
  »Räkna med Delphi   »Egna typer
  »Selektion
  »Iteration
  »Menyer
  »Funktioner
  »Arraystrukturer

Tips & Tricks
  »Nya tips
  »Blandat
  »Databaser
  »Filer
  »Forms
  »Grafik
  »Internet
  »Komponenter
  »Matematik
  »Multimedia
  »Objekt/ActiveX
  »Skrivare
  »Strängar
  »System
  »Mest lästa tips

Artiklar
  »Delphi och ADO
  »Bygga en DLL
  »Skapa en enkel rapport
  »Hantera registret
  »Enheter, units
  »Klassen TCanvas
  »Använd LookUp Controls

 Nya tips
 Lägg till tips
 Delphilänkar
 Gästbok

 

Skapa en Excelfil utan att använda OLE Kategori: Objekt/ActiveX
Inlagt: 2004-04-13
Läst: 1598
Inlagt av: Staffan Berg
Beskrivning
Denna kod skapar en Excelfil utan att använda OLE automation.  
Kod
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;  

 
 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -