IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Вопрос по Delphi (http://www.imho.ws/showthread.php?t=92841)

Dolbonutiy 19.09.2005 16:30

Вопрос по Delphi
 
Есть таблица m-строк и n столбцов.
Как ее перенесть в Excel? :confused:

dyr_farot 19.09.2005 16:42

h__p://www.sedinko.ru/delphi/doc5.php
и
h__p://delphid.dax.ru/docs/view/excel.htm

Dolbonutiy 20.09.2005 15:48

Спсибо! А есть еще какие-нибудь способы(без CreateOleObject('Excel.Application'))?

dyr_farot 20.09.2005 15:51

в смысле? можно через CreateComObject(), можно TLB-ху импортнуть...
что именно нужно/не нравится?

Dolbonutiy 22.09.2005 15:42

Да не теперь уже все нормально. Просто работать отказывалась(забыл comobj подключить).Спасибо!

Arm45 23.09.2005 13:04

А нуна точно xls. Или формат который читается Exel-ем?
Просто тогда все просто. Сохраняешь в csv-файл и вперед.

crazydown 25.09.2005 16:02

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

Создаём 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/


Часовой пояс GMT +4, время: 23:46.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.