Так, от балды...
| Код | 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; | |