Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Resumen
En este artículo se muestra cómo automatizar Microsoft Word desde un script del lado cliente para realizar una combinación de correspondencia para etiquetas. Word no tiene un método directo para usar datos XML como origen de datos para una combinación de correspondencia. En el ejemplo se muestra el código de Active Server Pages (ASP) que transmite un conjunto de registros XML desde un servidor web a un cliente. El script del lado cliente convierte estos datos XML en un archivo de texto delimitado que es local para el cliente y, a continuación, automatiza Word para realizar una combinación de correspondencia mediante el archivo de texto local como origen de datos de combinación de correspondencia.
Más información
ActiveX Data Objects (ADO) 2.5 y versiones posteriores permite que los datos del conjunto de registros se conserven en formato XML. Con ASP en un servidor web, puede crear un conjunto de registros de ADO a partir de una base de datos y devolver los datos como XML a los clientes. A su vez, los clientes pueden usar ADO para leer el conjunto de registros XML y manipular los datos según sea necesario. Consulte la sección "Referencias" de este artículo para obtener vínculos a recursos adicionales sobre el uso de ADO con XML.
Para fines ilustrativos, en el ejemplo siguiente se usa la base de datos pubs de ejemplo en Microsoft SQL Server. Sin embargo, se puede usar código similar para realizar una combinación de correspondencia con cualquier base de datos a la que pueda realizar una conexión ADO.
Muestra
En el servidor web, cree un directorio virtual denominado WordMailMerge.
Use el Bloc de notas para crear un archivo denominado Default.asp que contenga el código que se indica a continuación. Guarde el archivo en el directorio virtual WordMailMerge.
<%@ Language=VBScript %> <HTML> <BODY> <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 oRS.Open "http://" & sServer & "/WordMailMerge/Getdata.asp" ' 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> <INPUT type=button value="Create Word Document" onclick="VBScript:ButtonClick"> </BODY> </HTML>
Use el Bloc de notas para crear un archivo denominado Getdata.asp que contenga el código que se indica a continuación. Guarde el archivo en el directorio virtual WordMailMerge.
<%@ Language=VBScript %> <% Dim oConn,oRS,strConn,sSQLServer ' Build the connection string. Replace <username> and <strong password> with ' the username and password of an account that has permissions on the database. sSQLServer = "<servername>" strConn = "Provider=SQLOLEDB.1;Persist Security Info=False;" & _ "User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=" & sSQLServer ' Set our return content type. Response.ContentType = "text/xml" ' Create a connection. set oConn = Server.CreateObject("ADODB.Connection") ' Open the connection. oConn.Open strConn ' Execute the SQL statement. set oRS = oConn.Execute(“SELECT * FROM AUTHORS”) ' Save the recordset in the Response object. oRS.Save Response,1 %>
Cambie la variable sServer en Default.asp para que apunte al servidor web y cambie la variable sSQLServer en Getdata.asp para que apunte al SQL Server.
Inicie Internet Explorer y vaya a https://servername/WordMailMerge/Default.asp (donde nombreServidor es el nombre del servidor web).
Haga clic en el botón de la página Web para automatizar Word y realizar la combinación de correspondencia. Una vez completada la automatización, Word aparece con un nuevo documento que contiene las etiquetas postales resultantes de la combinación de correspondencia.
Referencias
Para obtener más información, haga clic en los números de artículo siguientes para ver los artículos de Microsoft Knowledge Base:
258512 Automatización de Word desde Visual Basic para crear una combinación de correspondencia para etiquetas postales