Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Вывод данных в Excel или Word.


Автор: Loki_ 29.2.2004, 01:40
Как вывести данные в Excel и Word.

Автор: srd 29.2.2004, 02:11
http://forum.vingrad.ru/index.php?act=ST&f=32&t=800

Автор: Kesh 29.2.2004, 11:20
Какие именно данные и куда именно?...

Автор: Kesh 29.2.2004, 11:21
Так, от балды...
Код
unit k_excel;

interface
Uses SysUtils, Windows, OleServer, Excel2000, main, ActiveX, forms, OleCtrls,
    ClipBrd, Variants;

const
 xlLCID = LOCALE_USER_DEFAULT;

var
 Excel: Excel2000.TExcelApplication;
 WorkBook: Excel2000._WorkBook;
 WorkSheet: Excel2000._WorkSheet;

procedure StartExcel;
procedure ShowExcel;
procedure HideExcel;
procedure CloseExcel;
procedure OpenExistingWorkBook(FileName: String);
procedure CloseWorkBook(FileToSaveName: String);
procedure ExportStartData;
procedure ExportNormalData;

implementation

Uses Utils;

procedure StartExcel;
var
 NewInstance: boolean;
begin
 NewInstance := true;
 Excel := TExcelApplication.Create(frmMain);
 if NewInstance
   then Excel.ConnectKind := ckNewInstance
   else Excel.ConnectKind := ckRunningOrNew;
 Excel.Connect;
end;

procedure ShowExcel;
begin
 if Assigned(Excel)
   then
     begin
       Excel.Visible[xlLCID] := true;
       if (Excel.WindowState[xlLCID] = TOleEnum(xlMinimized))
         then Excel.WindowState[xlLCID] := TOleEnum(xlNormal);
       Excel.ScreenUpdating[xlLCID] := true
     end;
end;

procedure HideExcel;
begin
 if Assigned(Excel)
   then Excel.Visible[xlLCID] := false
end;

procedure CloseExcel;
begin
 if Assigned(Excel)
   then
     begin
       if (Excel.Workbooks.Count>0) and (not Excel.Visible[xlLCID])
         then
           begin
             Excel.WindowState[xlLCID] := TOleEnum(xlMinimized);
             Excel.Visible[xlLCID] := true;
             Application.BringToFront
           end
         else Excel.Quit;
       FreeAndNil(Excel)
     end
end;

procedure OpenExistingWorkBook(FileName: String);
begin
 WorkBook := Excel.Workbooks.Open(FileName,EmptyParam,EmptyParam,EmptyParam,
                                  EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                                  EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                                  false,xlLCID);
end;

procedure CloseWorkBook(FileToSaveName: String);
var
 SaveChanges: boolean;
begin
 SaveChanges:=false;
 WorkBook.SaveCopyAs(FileToSaveName,xlLCID);
 WorkBook.Close(SaveChanges,EmptyParam,EmptyParam,xlLCID);
end;

procedure ExportStartData;
var
 i: integer;
 Buff: String;
 C: TClipBoard;
begin
 C := TClipboard.Create;
 Buff := '';
 WorkSheet := WorkBook.Worksheets.Item['Исходные данные'] as Excel2000._WorkSheet;
 for i := 0 to High(FirstExpert) do
   begin
     Buff := Buff + FloatToStr(FirstExpert[i]) + #9 + FloatToStr(SecondExpert[i]) + #9 + FloatToStr(ThirdExpert[i]) + #9 + FloatToStr(MMG[i]) + #10;
     frmMain.Caption := Format('Экспорт исходных данных - %d%s выполнено',[Round(i*100/High(ND)),'%']);
   end;  
 Delete(Buff,Length(Buff),1);
 C.SetTextBuf(PChar(Buff));
 try
   WorkSheet.Cells.Item[1,1].PasteSpecial
 finally
   C.Clear;
   C.Free;
   WorkSheet := Nil
 end
end;

procedure ExportNormalData;
var
 i,j: integer;
 Buff: String;
 C: TClipBoard;
 TempArr: array of array[140..260] of real;
begin
 C := TClipboard.Create;
 WorkSheet := WorkBook.Worksheets.Item['Нормальное распределение'] as Excel2000._WorkSheet;
 SetLength(TempArr,N);
 for i := 0 to High(TempArr) do
   begin
     for j := 140 to 260 do
       TempArr[i,j] := GetNormalProbability(FirstExpert[i],SecondExpert[i],ThirdExpert[i],j*0.05,Sigma);
     frmMain.Caption := Format('Расчет нормального распределения - %d%s выполнено',[Round(i*100/High(ND)),'%']);
   end;
 for i := 0 to High(TempArr) do
   begin
     Buff := '';
     C.Clear;
     for j := 140 to 260 do Buff := Buff + FloatToStr(TempArr[i,j]) + #9;
     frmMain.Caption := Format('Экспорт данных по нормальному распределению - %d%s выполнено',[Round(i*100/High(ND)),'%']);
     Delete(Buff,Length(Buff),1);
     C.SetTextBuf(PChar(Buff));
     WorkSheet.Cells.Item[i+1,1].PasteSpecial;
   end;
 frmMain.Caption := 'Формирование отчета окончено';
 C.Clear;
 C.Free;
 WorkSheet := Nil
end;

Автор: Kesh 29.2.2004, 11:23
И еще от балды...
Код
procedure TfrmMain.btnReportClick(Sender: TObject);
var
 XLWB: _Workbook;
 XLWS: _WorkSheet;
 IIndex: OleVariant;

begin
 Excel.Connect;
 Excel.Visible[0] := true;
 Excel.Workbooks.Add(xlWBatWorkSheet,0);
 IIndex := 1;
 XLWB := Excel.Workbooks.Item[IIndex];
 XLWS := XLWB.Worksheets.Get_Item(1) as _WorkSheet;
 XLWS.Name := 'Сделано Аникеевым Константином';
 XLWS.Range['A1','A1'].Value := 'Hello';
 Sleep(1000);
 XLWS.Range['A1','A1'].Font.Color := clBlue;
 Sleep(1000);
 XLWS.Range['A1','A1'].Interior.Color := clYellow;
 Sleep(1000);
 XLWS.Range['A1','A1'].Font.Bold := true;
 Sleep(1000);
 Excel.Disconnect
end;

Автор: Maverick 1.3.2004, 17:01
Читайте FAQ..... там есть несколько прекрасных примеров....

Автор: Georg4 2.3.2004, 00:36
И заметте ! я молчу!
smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)