Hello everybody !

I try since some week to lanch "automagically" fron one clic under IE on a
web page :
-> the download of a data file for Word mail merge, and save it on local
disk WITHOUT PROMPTING,
-> lanch the Word application and the merge.

I've found one script (below) to do this... or nearly : in fact this script
retrieve data from an sql server, instead of a poor data text file
(text+tab) on a html server (what i want).
And, even after several tries,.... i'm not able to modify it ....8-(((
NOTA : the data text file has the first row for name header, and the second
row has data (only 2 lines).

So... any help would be welcome !!!!!

Thanks

Eric
---------------------

<script language="VBScript">

Sub CreateDataDoc(oApp)
' Declare variables.
Dim sServer,oDoc,oRS,sTemp,sHead,oRange,oField

' Place your server's name here.
sServer = "<servername>"
' Create a new document.
Set oDoc = oApp.Documents.Add
' Create a new recordset.
Set oRS = CreateObject("ADODB.Recordset")
' Open the XML recordset from the server and pass the SQL statement
' to the Getdata.asp page.
sSQL = "SELECT * FROM AUTHORS"
oRS.Open "http://" & sServer & "/WordMailMerge/Getdata.asp?SQL=" & sSql
' Convert the recordset to a string.
sTemp = oRS.GetString(2, -1, vbTab) ' 2 = adClipString

' Append the field names to the front of the string.
For Each oField In oRS.Fields
sHead = sHead & oField.Name & vbTab
Next

' Strip off the last tab.
sTemp = Mid(sHead, 1, Len(sHead) - 1) & vbCrLf & sTemp

' Get a range object and insert the text into the document.
Set oRange = oDoc.Range
oRange.Text = sTemp

' Convert the text to a table.
oRange.ConvertToTable vbTab
' Save the document to a temp file.
oDoc.SaveAs "C:\data.doc"
' Close the document (no save).
oDoc.Close False
End Sub


Sub ButtonClick()
Dim oApp
Dim oDoc
Dim oMergedDoc

' Create an instance of Word.
Set oApp = CreateObject("Word.Application")

' Create our data file.
CreateDataDoc oApp

' Add a new document.
Set oDoc = oApp.Documents.Add
With oDoc.MailMerge
' Add our fields.
.Fields.Add oApp.Selection.Range, "au_fname"
oApp.Selection.TypeText " "
.Fields.Add oApp.Selection.Range, "au_lname"
oApp.Selection.TypeParagraph
.Fields.Add oApp.Selection.Range, "city"
oApp.Selection.TypeText ", "
.Fields.Add oApp.Selection.Range, "state"
oApp.Selection.TypeParagraph
.Fields.Add oApp.Selection.Range, "zip"
oApp.Selection.TypeParagraph

' Create an autotext entry.
Dim oAutoText
Set oAutoText = oApp.NormalTemplate.AutoTextEntries.Add _
("MyLabelLayout", oDoc.Content)
oDoc.Content.Delete
.MainDocumentType = 1 ' 1 = wdMailingLabels

' Open the saved data source.
.OpenDataSource "C:\data.doc"

' Create a new document.
oApp.MailingLabel.CreateNewDocument "5160", "", _
"MyLabelLayout", , 4 ' 4 = wdPrinterManualFeed

.Destination = 0 ' 0 = wdSendToNewDocument
' Execute the mail merge.
.Execute

oAutoText.Delete
End With

' Close the mail merge edit document.
oDoc.Close False
' Get the current document.
Set oMergedDoc = oApp.ActiveDocument
' Show Word to the user.
oApp.Visible = True

' Uncomment these lines to save the merged document locally.
'oMergedDoc.SaveAs "C:\test.doc"
'oMergedDoc.Close False
'oApp.Quit False
End Sub

</script>

Re: Mail merge - data (text+tab) via http by noone

noone
Tue Feb 22 15:58:22 CST 2005

Il giorno Fri, 18 Feb 2005 08:55:33 +0100, "Eric MAISONOBE" <viret@nat.fr> ha scritto:
>I try since some week to lanch "automagically" fron one clic under IE on a
>web page :
>-> the download of a data file for Word mail merge, and save it on local
>disk WITHOUT PROMPTING,
>-> lanch the Word application and the merge.
This downloads the file ssource as a local file sdest.

Sub DownloadWithXMLHTTP (sSource,sDest)
'Download a file using activeX Object XMLHTTP
'and save to sDest using ADO Stream
set oHTTP = WScript.CreateObject("Microsoft.XMLHTTP")
oHTTP.open "GET", sSource, False
oHTTP.send
set oStream = createobject("adodb.stream")
Const adTypeBinary = 1
Const adSaveCreateNotExist = 1
Const adSaveCreateOverWrite = 2
oStream.type = adTypeBinary
oStream.open
oStream.write oHTTP.responseBody
oStream.savetofile sDest, adSaveCreateOverWrite
set oStream = nothing
set oHTTP = nothing
end sub

I use excel to convert fixed width data tables.

Set objXL = CreateObject("Excel.Application")
objXL.visible=true
objXL.Workbooks.add

[open file]

xlFixedWidth=2
objXL.Range(objXL.cells(1,1),objXL.cells(100,1)).Select
objxl.Selection.TextToColumns objxl.Range("A1"), xlFixedWidth

--
Giovanni Cenati (Aosta, Italy)
Write to user "Reventlov" and domain at katamail com
http://digilander.libero.it/Cenati (VbScript)