Fórum Delphi Excel #226604

17/04/2004

0

Como faço para gerar arquivos no excel ?

Preciso gerar alguns arquivos urgentemente...

Desde já agradeço...

Wesley Costa


Wesleycosta

Wesleycosta

Responder

Posts

17/04/2004

Rômulo Barros

Pesquise aqui no fórum. Existem vários tópicos relacionados ao assunto. Pesquise pelo nome do autor ´Undeclared Identifier´ ou pelo tópico ´Excel´. Garanto que ira encontrar muitos... :P :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: Que raiva... ..... :twisted: não suporto isto.. pq vcs .. esquece.. deixe-me calado :?


Responder

Gostei + 0

17/04/2004

Lucas Silva

Já respondi também vairias coisas sobre o assunto aqui no fórum, antes de postar alguma coisa, utlize o método de pesquisa aqui no fórum, que você vai achar muita coisa sobre o assunto.


Responder

Gostei + 0

17/04/2004

Tatuweb

Acredito que a grande maioria (senão todas) das dicas que vc irá encontrar para gerar arquivos para Excel a partir do Delphi utilizará OLE. É mais prático mas, e se não houver o Excel instalado na máquina? Então posto a dica abaixo pois ela permite que seja gerados arquivos para Excel mesmo que este não esteja instalado e com a vantagem de gerar um arquivo reduzido.

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; 

// Use a assim
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); 
      end; 
    XlsEndStream(FStream); 
  finally 
    FStream.Free; 
  end; 
end;


Lembre-se: OLE é mais prático. Só use a dica acima caso não a máquina não possua o Excel instalado. :wink:


Responder

Gostei + 0

17/04/2004

Rômulo Barros

Parabéns, TatuWeb ... Muito boa a dica... :)


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar