Delphi - Word körlevél készítése SQL adatbázisból

forráskód letöltése
Készítünk egy példaprogramot, amely egy SQL adatbázis megadott mezőiből készít egy Excel táblázatot. A létrehozott Excel táblázatban tároljuk el azoknak a személyeknek a címét, akiknek körlevelet kívánunk küldeni. A körlevelet a Word program segítségével készítjük el, adatforrása a létrehozott Excel táblázat lesz.
A mellékelt példaprogram futtatása előtt a Form1.pas forráskód ADOConnection1 objektumának ConnectionString értékét módosítsa úgy, hogy a Northwind példaadatbázis elérhetővé váljon.
A címzettek adatait a Northwind adatbázis employees táblájából nyerjük az alábbi lekérdezés segítségével.
SELECT FirstName, LastName, Country, Region, City, Address, PostalCode FROM employees
A lekérdezés eredményét elhelyezzük egy Excel táblázatban. Ehhez először meg kell nyitnunk magát az Excel programot.
ExcelApp:=CreateOleObject('Excel.Application');
Létrehozunk egy új munkafüzetet.
ExcelApp.Workbooks.Add;
A Range objektumot ráállítjuk az A1-es cellára.
Range:=ExcelApp.ActiveCell;
Az első sorban az adatok fejlécét kell elhelyeznünk. Ezt egy for ciklus segítségével könnyedén megtehetjük.
for i:=0 to ADOQuery1.Fields.Count-1 do begin
  Range.Value:=ADOQuery1.Fields[i].DisplayLabel;
  Range:=Range.Next;
end;
A fejléc kitöltése után az ADOQuery1 objektumban lévő adathalmazt kell elhelyeznünk a megfelelő cellákba. A pozícionáláshoz itt közvetlen cellakoordinátákat használunk.
Range:=ExcelApp.Range['A'+IntToStr(Row),'A'+IntToStr(Row)];
Miután megszerkesztettük a táblázatot, a SaveAs metódus meghívásával, tartalmát elmentjük a Temp.xls állományba.
ExcelApp.ActiveWorkBook.SaveAs(ExtractFilePath(Application.ExeName)+'Temp.xls');
A Word programot az Excelhez hasonlóan nyithatjuk meg.
Itt és létre kell hoznunk egy új dokumentumot.
Document:=WordApp.Documents.Add;
A Microsoft Word programban körlevelet a MailMerge osztály segítségével készíthetünk.
Meg kell nyitnunk az előbb elkészített adatforrást.
Document.MailMerge.OpenDataSource(ExtractFilePath(Application.ExeName)+'Temp.xls');
A Destination property beállításával adhatjuk meg, hogy a dokumentum és az adatforrást milyen formában kívánjuk egyesíteni. A következő konstansokat használhatjuk: új dokumentum: wdSendToNewDocument = $00000000, nyomtató: wdSendToPrinter = $00000001, e-mail: wdSendToEmail = $00000002, fax: wdSendToFax = $00000003.
Az adatforrásból beolvasott adatmezők neveit a FieldNames property-ből tudhatjuk meg.
FieldNames:=Document.MailMerge.DataSource.FieldNames;
A szerkesztendő dokumentumba egy mezőt az alábbi módon szúrhatunk be.
Document.MailMerge.Fields.Add(WordApp.Selection.Range,FieldNames.Item(1).Name);
A beszúrandó mezőt neve alapján kell azonosítanunk.
A levél megszerkesztése után az elkészült Word dokumentumunkat és az Excel adatforrásunkat az Execute metódus meghívásával egyesíthetjük.
Document.MailMerge.Execute;