HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Excel táblázat átmásolása Word-be a vágólap segítségével Delphi programból


Példaprogram letöltése

3891 bájt

Az itt bemutatásra kerülő cikkben arra láthatunk példát, hogyan lehet egy Excel táblázat tartalmát egy Word dokumentumba beszúrni Delphi program segítségével, miközben az adatokat a Windows vágólapjára másoljuk, majd onnan beillesztjük.

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.
  Sheets:=ExcelApp.Sheets;
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.
  InsertDataToWord;
end;
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.
  WordApp.Documents.Add;
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.

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 503. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |