Delphi Excel
Como faço para gerar arquivos no excel ?
Preciso gerar alguns arquivos urgentemente...
Desde já agradeço...
Wesley Costa
Preciso gerar alguns arquivos urgentemente...
Desde já agradeço...
Wesley Costa
Wesleycosta
Curtidas 0
Respostas
Rômulo Barros
17/04/2004
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 :?
GOSTEI 0
Lucas Silva
17/04/2004
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.
GOSTEI 0
Tatuweb
17/04/2004
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.
Lembre-se: OLE é mais prático. Só use a dica acima caso não a máquina não possua o Excel instalado. :wink:
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:
GOSTEI 0
Rômulo Barros
17/04/2004
Parabéns, TatuWeb ... Muito boa a dica... :)
GOSTEI 0