A feladatot bontsuk három részre. Először nyissunk meg egy Excel munkalapot, melyet töltsünk fel pár adattal. Ezután jelöljük ki az adatokat, majd másoljuk őket a Windows vágólapra. Végül nyissunk egy Word dokumentumot, majd a vágólapról illesszük be az adatokat.
Ennek megfelelően készítsünk három eljárást, melyek mindezt megvalósítják.
Kezdjük is az első résszel:
procedure TForm1.InsertDataToExcel;
var
Sheet: Variant;
x,y: Integer;
begin
Először megnyitjuk az Excel alkalmazást, majd láthatóvá tesszük.
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.Visible:=True;
Ezután egy új munkafüzetet nyitunk, és az első munkalapjának nevet is adunk.
ExcelApp.Workbooks.Add;
ExcelApp.Workbooks[1].Worksheets[1].Name:='Animare Software példa';
A Sheet nevű változóban eltároljuk az így létrejött munkafüzetet, így a későbbiekben ezzel tudunk rá hivatkozni.
Sheet:=ExcelApp.Workbooks[1].Worksheets['Animare Software példa'];
Egy ciklus segítségével feltöltjük a munkafüzet megadott celláit adatokkal.
for x:=1 to 10 do
for y:=1 to 10 do
Sheet.Cells[y, x]:=x;
end;
Ezzel a feladat első részét teljesítettük. Nézzük, hogyan másoljuk át az adatokat a vágólapra.
procedure TForm1.CopyData;
var
Sheets: Variant;
begin
SetFocus;
A Sheets változóban eltároljuk az aktuális munkafüzetünket.
Kiválasztjuk a munkafüzet megfelelő lapját, azaz azt, melynek Animare Software példa a neve.
Sheets.Item['Animare Software példa'].Activate;
Kijelöljük azokat a cellákat a Range osztály Select metódusával, melyekben az adataink vannak. Esetünkben ez az A1:J10 cellatartomány lesz.
Sheets.Item['Animare Software példa'].Range['A1:J10'].Select;
A kijelölt cellákat a Copy segítségével a vágólapra másoljuk.
Sheets.Item['Animare Software példa'].UsedRange.Copy;
Ezután meghívjuk azt a függvényt, amely létrehozza a Word dokumentumot, és a vágólapról beilleszti az adatokat.
Végül nincs más hátra, mint elkészíteni ezt a függvényt.
procedure TForm1.InsertDataToWord;
var
Range: Variant;
begin
Első lépésként megnyitjuk a Word-öt, majd láthatóvá tesszük.
WordApp:=CreateOleObject('Word.Application');
WordApp.Visible:=True;
Létrehozunk egy új dokumentumot az Add segítségével.
A beszúrandó adatok elé egy megjegyzést teszünk.
Range:=WordApp.Documents.Item(1).Range;
Range.Text:='Az alábbi adatok kerültek átmásolásra az Excel dokumentumból:';
Ezután beszúrunk egy üres sort, hogy a szöveg elkülönüljön az adatoktól. Azért kell kétszer is elvégeznünk a Paragraphs.Add műveletet, mert először a szöveg végén kell egy kocsi vissza (CR) műveletet véghezvinni, majd az üres sor után.
WordApp.Documents.Item(1).Paragraphs.Add;
WordApp.Documents.Item(1).Paragraphs.Add;
Beillesztjük az üres sor után a Range.Paste segítségével az adatokat a vágólapról.
Range:=WordApp.Documents.Item(1).Range(WordApp.Documents.Item(1).Paragraphs.Item(3).Range.Start);
Range.Paste;
end;
Ezután programunkban a megfelelő gombokhoz rendeljük a fenti függvényeket.
Ne feledkezzünk meg arról sem, hogy a program használata után a megnyitott alkalmazásokat is lezárjuk. Ezt a Form-unk OnDestroy eseményéhez igazítottuk.
procedure TForm1.FormDestroy(Sender: TObject);
begin
if not VarIsEmpty(ExcelApp) then
begin
Az Excel alkalmazásból úgy lépünk ki, hogy az ne kérdezzen rá, hogy a munkafüzetet elmentse-e. Ezt a DisplayAlert hamisra állításával tehetjük meg.
ExcelApp.DisplayAlerts:=False;
ExcelApp.Quit;
end;
if not VarIsEmpty(WordApp) then
begin
A Word esetén is ezt az utat választjuk a kilépésre, itt azonban a dokumentum Close metódusának kell hamis értéket kapnia.
if not VarIsEmpty(WordApp) then
begin
try
WordApp.Documents.Item(1).Close(False);
WordApp.Quit;
except on EOleSysError do Close;
end;
end;
Amennyiben nem a programunkból, hanem manuálisan lett lezárva az alkalmazás, EOleSysError-t kapunk. Egy try…except metódussal levizsgáljuk ezt a kivételt.