1 Son düzenleyen, cetinbasoz (11.06.2009 13:17:08)

Konu: Corbaya tuz - MailMerge

Word Mail Merge. Tek ozelligi word'un bugini hallediyor, word2007'de de bile calisiyor.

Bunu bugun foxite'da yayinladim. bence iyi kod:) Gavurlara verdikten sonra size niye vermiyim ( bu arada gavur Izmirden sevgilerle ):

Ornek kullanim kodu:

Visual Fox Pro
select firstName, lastName, notes ;

  from (_samples+'data\employee') ;
  where upper(title) like '%SALES%' ;
  into cursor xx nofilter
 
* Template yoksa
WordMailMerger('xx')
 
* template ile
WordMailMerger('xx','c:\myFolder\MyPredefinedTemlate.doc') && with template



Visual Fox Pro
*WordMailMerger.prg

*Author: Cetin Basoz
*If you would use this:
*  Do not modify any part w/o permission
*  Do not remove this comment lines
Lparameters tcCursorName, tcTemplateDoc
Local lnSelect, lcTemp, lcTempDb
lnSelect = Select()
lcTemp   = Forcepath(Sys(2015)+'.dbf',Sys(2023))
lcTempDb = Forcepath(Sys(2015)+'.dbc',Sys(2023))
 
Create Database (m.lcTempDb)
Select * From (m.tcCursorName) Into Table (m.lcTemp) Database (m.lcTempDb)
 
Use In (Juststem(m.lcTemp))
Close Databases
Set Database To
Select (m.lnSelect)
 
#Define wdOpenFormatAuto    0
#Define wdSendToNewDocument    0
#Define wdSendToPrinter    1
#Define wdSendToEmail    2
#Define wdSendToFax    3
 
#Define wdMergeSubTypeOther 0
#Define NL Chr(13)+Chr(10)
 
Wait Window Nowait "Creating Word Document.Please wait..."
Local lcConnection, lcSource, lcSQLStatement, lcSQLStatement1
Local nLocaleID, loWord,oWordEvents
 
lcConnection = "Provider=VFPOLEDB;Data Source="+m.lcTempDb
m.lcSource = Forcepath('dummy.udl',Sys(2023))
If !File( m.lcSource )
  Strtofile('',m.lcSource)
Endif
 
lcSQLStatement = Textmerge('select * from [<<trim(JUSTSTEM(m.lcTemp))>>]')
lcSQLStatement1 = ''
 
*** set the LOCALEID to English
nlLocaleId=Sys(3004)  && Save local id
=Sys(3006,1033)    && We will be sending instructions in English
*** set the LOCALEID to English
 
loWord=Createobject("word.application")    && Create word object
oWordEvents = createobject('WordEvents',loWord)
Eventhandler(loWord,oWordEvents)
oWordEvents.tmpDb = m.lcTempDb
 
With loWord
  If Empty(m.tcTemplateDoc) && No template
    .documents.Add()  && New file
  Else
    .documents.Add(m.tcTemplateDoc)  && Open a template
  Endif
  With .ActiveDocument.Mailmerge
    .OpenDataSource(m.lcSource, wdOpenFormatAuto,,,.T.,,,,,,, ;
      m.lcConnection, m.lcSQLStatement, m.lcSQLStatement1)
    .EditMainDocument    && Activate the main document
  Endwith
  .Visible = .T.   && Show word app
  .Activate
Endwith
 
**** Set the LocaleId to the previous value
=Sys(3006,Val(nlLocaleId))
 
Define Class WordEvents As Session OlePublic
  Implements ApplicationEvents2 In "C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE11\MSWORD.OLB"
 
  oHook = Null
  tmpDb = ''
 
  Procedure Init(loHook)
    This.oHook  = loHook
  Endproc
 
  Procedure ApplicationEvents2_Quit() As VOID
    If !Empty(This.tmpDb)
      Set Safety Off
      Delete Database (This.tmpDb) Deletetables
    Endif
    Eventhandler(This.oHook,This,.T.)
  Endproc
 
  Procedure ApplicationEvents2_DocumentChange() As VOID
  Endproc
  Procedure ApplicationEvents2_DocumentOpen(Doc As VARIANT) As VOID
  Endproc
  Procedure ApplicationEvents2_DocumentBeforeClose(Doc As VARIANT, Cancel As LOGICAL) As VOID
  Endproc
  Procedure ApplicationEvents2_DocumentBeforePrint(Doc As VARIANT, Cancel As LOGICAL) As VOID
  Endproc
  Procedure ApplicationEvents2_DocumentBeforeSave(Doc As VARIANT, SaveAsUI As LOGICAL, Cancel As LOGICAL) As VOID
  Endproc
  Procedure ApplicationEvents2_NewDocument(Doc As VARIANT) As VOID
  Endproc
  Procedure ApplicationEvents2_WindowActivate(Doc As VARIANT, Wn As VARIANT) As VOID
  Endproc
  Procedure ApplicationEvents2_WindowDeactivate(Doc As VARIANT, Wn As VARIANT) As VOID
  Endproc
  Procedure ApplicationEvents2_WindowSelectionChange(Sel As VARIANT) As VOID
  Endproc
  Procedure ApplicationEvents2_WindowBeforeRightClick(Sel As VARIANT, Cancel As LOGICAL) As VOID
  Endproc
  Procedure ApplicationEvents2_WindowBeforeDoubleClick(Sel As VARIANT, Cancel As LOGICAL) As VOID
  Endproc
Enddefine

2

Re: Corbaya tuz - MailMerge

Eline saglik hocam , gavur izmire selamlar smile

Kucuk bir duzeltme

SQL de first_name,last_name olacak firstname,lastname hata veriyor .

Implements ApplicationEvents2 In "C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE11\MSWORD.OLB"
office versiyonuna gore duzenlemek gerekiyor sanirim OFFICE11 denedim not found hatasi aldim
12 de hata yok gelen bir sey de yok sad

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

3 Son düzenleyen, altun (11.06.2009 14:39:10)

Re: Corbaya tuz - MailMerge

12 de hata yok gelen bir sey de yok

Öncelikle Çetin beye yayınlamış olduğun bu bilgiden dolayı da teşekkür ederim.

Sevgili Soykan

İstediğin şeyin gelmesi için daha önceden word template dosyası hazırlaman gerekiyor. veya senin yaptığın gibi word template dosyası hazır değilse açılan boş word dökümanını bu amaç için kullanabilirsin.

Bu işlem ise şu şekilde oluyor

wordmailmerge islemi sonucunda açılan boş word dökümanının üstmenüsünde ki postalar sekmesinde birleştirme alan ekle bölümünde firstname, lastname ve notes seçenekleri var. Bunları seçerek word dökümanı üzerine ilgili alanları data bağımlı ekleyebilirsin.


Altun

4

Re: Corbaya tuz - MailMerge

member activedocument does not evaluate to an object diye hata veriyor.

çok cahilce bir soru olacak ama bir de bu word mail merge ne oluyor? roll

yani daha önce de çok rastladım bu terime ama...

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

5 Son düzenleyen, altun (11.06.2009 15:23:27)

Re: Corbaya tuz - MailMerge

metin yazdı:

member activedocument does not evaluate to an object diye hata veriyor.

çok cahilce bir soru olacak ama bir de bu word mail merge ne oluyor? roll

yani daha önce de çok rastladım bu terime ama...

Kısaca Adres Mektup birleştirme işlemi.   Bir word dökümanı seçili bir data kaynağıyla ilişkilendirerek (genelde excel kullanılıyor data kaynağı olarak)
kişiye özel hale getirip yazıcıya göndermek için kullanılıyor.

Kullanılan Word dökümanı ihtiyaca göre hazırlanabiliyor.

Örnek bir word şablonu

Sayın «firstname»  «lastname»
«sokakadi» «kapino»
«ilce»«sehir»

«kisiyeait_gorsume_yeri»  de yapacağınız görüşemeye saat «kisiyeait_gorusme_saatii» de katılmanız gerekmektedir.

«» işaretleri word şablonuna data bağımlı object eklemek için direkt olarak kullanılamayor. Bunun yerine word üzerinde bulunan ilgili objectlerin tıklanarak kullanılması gerekiyor.


Kullanılan excel veri kaynağında
firstname lastname sokakadi kapino ilce sehir kisiyeait_gorsume_yeri kisiyeait_gorusme_saatii  kolonları olması gerekiyor.

Çetin beyin gönderdiği kod ile wordün bu özelliği foxpro prgramıyla entegre bir şekilde kullanılabiliyor.

6

Re: Corbaya tuz - MailMerge

Soykan,
Kodun derlendigi yerde .olb dosyasi neredeyse o dizini ver. Benimki office 2003 dizini. 2007 icin:

IMPLEMENTS ApplicationEvents2 IN "c:\program files\microsoft office\office12\msword.olb"

firstName, lastName onemli degil:) Dogrusunu biliyorsun.

7

Re: Corbaya tuz - MailMerge

cetinbasoz yazdı:

Soykan,
Kodun derlendigi yerde .olb dosyasi neredeyse o dizini ver. Benimki office 2003 dizini. 2007 icin:

IMPLEMENTS ApplicationEvents2 IN "c:\program files\microsoft office\office12\msword.olb"

firstName, lastName onemli degil:) Dogrusunu biliyorsun.

Dedigin gibi zaten yapmistim smile ornek word template i olmadigi icin sonuc goremiyorum ,

Sayın <<first_name>> <<last_name>>

<<notes>>

seklinde bir mytemplate.dotx kaydettim ama gene data gelmedi hatam nerde bilemiyorum sad

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

8

Re: Corbaya tuz - MailMerge

soykanozcelik yazdı:


Sayın <<first_name>> <<last_name>>

<<notes>>

seklinde bir mytemplate.dotx kaydettim ama gene data gelmedi hatam nerde bilemiyorum sad


«» işaretleri (<<  >> işaretleri değil) word şablonuna data bağımlı object eklemek için direkt olarak kullanılamayor. Bunun yerine word üzerinde bulunan ilgili objectlerin tıklanarak kullanılması gerekiyor.

Template hazırlama ile tenkik bilgi için

http://docs.softartisans.com/OfficeWrit … lates.aspx

9

Re: Corbaya tuz - MailMerge

Tesekkur Ali dokumana ve office2007 wizardlari ile sanirim daha halledicem

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

10

Re: Corbaya tuz - MailMerge

Üstad;

Döktürmüşsün yine. Ellerine sağlık. smile

Bu arada gavur sözünü vatanseverlik olarak söylüyorsan bir gavurda burada var smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

11

Re: Corbaya tuz - MailMerge

Soykan,
Template olmasi gerekmiyor. Varsa kullan. Daha once hic mailmerge yapmadiysan once yardimdan onu oku. Cok basit ya, alti ustu toolbardan "Insert merge field".

12

Re: Corbaya tuz - MailMerge

cetinbasoz yazdı:

Soykan,
Kodun derlendigi yerde .olb dosyasi neredeyse o dizini ver. Benimki office 2003 dizini. 2007 icin:

IMPLEMENTS ApplicationEvents2 IN "c:\program files\microsoft office\office12\msword.olb"

firstName, lastName onemli degil:) Dogrusunu biliyorsun.

peki benim hata niye? msword.olb dosyasında bir hata yok...

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

13

Re: Corbaya tuz - MailMerge

cetinbasoz yazdı:

Soykan,
Template olmasi gerekmiyor. Varsa kullan. Daha once hic mailmerge yapmadiysan once yardimdan onu oku. Cok basit ya, alti ustu toolbardan "Insert merge field".

2007 biraz daha karisik mailings - start mail merge ile baslaniyor illa bir yerlerden list secmek gerekiyor mesela contact listten serbest olarak ekleyemedim. fazlada ugrasmadim.

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

14

Re: Corbaya tuz - MailMerge

2007 biraz daha karmasik filan degil. Ayni kod, aynen 2007'de de calisiyor.
Metin,
senin hata niye bilemeyecegim. Sen daha temelde takiliyorsun. En iyisi bir ara isteyenlerin makinesinde teamviewer ile tek tek gostermek:)