unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtnrs,comobj;

type
  TForm1 = class(TForm)
    OleContainer1: TOleContainer;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    OpenDialog1: TOpenDialog;
    Button5: TButton;
    Button6: TButton;
    Button8: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const
  xlWBATWorksheet =$FFFFEFB9; // -4167;
  wdDoNotSaveChanges = 0;
  wdSaveChanges = -1;
  wdPromptToSaveChanges=-2;
  wdWindowStateMaximize = 1;
  wdWord9TableBehavior= 1;
  wdAutoFitFixed=0;
  wdCharacter=1;
  wdLine=5;
  wdCell=12;
  xlExcel8=56; //Excel8
  xlAddIn=18;	//Microsoft Office Excel Add-In
  xlAddIn8=18; //	Excel 2007 Add-In
  wdColorBrightGreen=65280;

var
  Form1: TForm1;
    ExcelA,Arkusz: OLEVariant;
    folder_b:string;
implementation

{$R *.dfm}
{function RefToCell(ARow, ACol: Integer): string;
begin
  Result := Chr(Ord('A') + ACol - 1) + IntToStr(ARow);
end;
 }
procedure TForm1.Button1Click(Sender: TObject);
begin
  ExcelA.Workbooks.Add(xlWBatWorkSheet);
  Arkusz := ExcelA.Workbooks[1].WorkSheets[1];
  Arkusz.Name := 'test';


end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Opendialog1.InitialDir:=GetCurrentdir;
  if OpenDialog1.Execute then
  Olecontainer1.CreateObjectFromFile(Opendialog1.FileName,false);
  //lub otwórz dokument wExcelu  ExcelA.WorkSheet[1].Open(Opendialog1.FileName);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  Olecontainer1.Close;
  //OleContainer1.SaveAsDocument('bb.doc');
  Olecontainer1.DestroyObject;

end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  ExcelA:=CreateOleObject('Excel.Application');
  //If not VarIsEmpty(ExcelA) then
  //ExcelA.Visible:=true;

end;

procedure TForm1.Button8Click(Sender: TObject);
begin
  // WordA.ActiveDocument.SaveAs('ala.doc');
   ExcelA.Quit;//(wdSaveChanges);
   ExcelA := Unassigned;
   Arkusz := Unassigned;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 //odczyt foldera biezacego
  folder_b:=GetCurrentDir;
end;

{procedure TForm1.Button9Click(Sender: TObject);
begin
  Opendialog1.InitialDir:=GetCurrentdir;
  if OpenDialog1.Execute then
    ExcelA.Worksheet[1].Open(Opendialog1.FileName);

end; }

procedure TForm1.Button3Click(Sender: TObject);
var  tablica: Variant;
     i, j: Integer;
begin
  //utworzenie tablicy typu Variant
  tablica := VarArrayCreate([1, 5, 1, 3], varVariant);

  //wypelnienie tablicy liczbami losowymi
  for i := 1 to 5 do
    for j := 1 to 3 do
      tablica[i,j] := Inttostr(Random(10));

  //naglowek tablicy
  tablica[1,1]:='LP';
  tablica[1,2]:='Liczby1';
  tablica[1,3]:='Liczby2';

 try
    // Wypelnij arkusz
    //Arkusz.Range[RefToCell(1, 1), RefToCell(5,5)].Value := tablica;

     //przypisnie calej tablicy zakresowi komórek w Excelu
     Arkusz.Range['B1','D5'].Value := tablica;

    //zmiana atrybutu czcionki w danym zakresie na pogrubiony
    Arkusz.Range['B1','D1'].Font.FontStyle:='Bold';

     //wypelnieie zakresu komórek kolorem zielonym
    Arkusz.Range['B1','D1'].Interior.Color := wdColorBrightGreen;

    //obliczenie sredniej liczb z komórek B2 do B5, wynik w B6
    Arkusz.Range['B6','B6'].Value:='=AVERAGE(B2:B5)';

    //srednia z kolumn
    Arkusz.Range['B7','D7'].Value:='=AVERAGE(R[-5]C:R[-2]C)';

    //suma z kolumn
    Arkusz.Range['B8','D8'].Value:='=SUM(R[-7]C:R[-3]C)';

    //wpisanie tekstu do komórki A6 i A7, jesli podaje się zakres
    //to ten sam tekst zostanie wpisany do wszystkich komórek zakresu
    Arkusz.Range['A6','A7'].Value:='Średnia=';
    Arkusz.Range['A8','A8'].Value:='Suma=';

    //autodopasowanie
    Arkusz.Columns['A:A'].EntireColumn.AutoFit;


   //wybór aktywnej komórki
   // Arkusz.Range['A5'].Select;
    //dodanie obramowania komórek, numery to stałe oznaczające dół (9), górę(8), , lewa krawędz(7), prawa krawedz(10)
     Arkusz.Range['B1','D8'].Borders[9].LineStyle:=1;  //podkreslenie dól
     Arkusz.Range['B1','D8'].Borders[7].LineStyle:=1;   //lewa krawedz
     Arkusz.Range['B1','D8'].Borders[10].LineStyle:=1;  //prawa krawedz
     Arkusz.Range['B1','D8'].Borders[8].LineStyle:=1; //gorna krawedz

     //podkreslenia dodatkowe
     Arkusz.Range['A9','D9'].Borders[9].LineStyle:=-4118;  //xlDot=-4118 - linia kropkowana, xlDouble=-4119 podkreslenie dól podwójne

     Arkusz.Range['A7','D7'].Borders[9].Weight:=-4138;  //xlMedium podkreslenie dól pogrubione
     Arkusz.Range['A7','D7'].Borders[9].LineStyle:=1;  //podkreslenie dól

  except
    //if not VarIsEmpty(ExcelA) then
    begin
      //ExcelA.DisplayAlerts := False;
     // ExcelA.Quit;

    end;
  end;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin

   // Zapisz arkusz Excela
    try
      //jesli plik otwarty to nie modyfikuj
      ExcelA.Workbooks[1].SaveAs(folder_b+'\'+'test.xls',xlAddIn);


    except
      // Error ?
    end;
    ExcelA.Workbooks[1].Close;//(wdPromptToSaveChanges);
end;

end.
