Utilizando el word

10/03/2006 - 17:21 por SergioT | Informe spam
Hola

Tengo la siguiente situacion, necesito crear en Word un documento tipo que
sea una carta y que pueda generar la misma carta para X cantidad de
personas, eso en Word es facil haciendo la "combinacion de documentos", la
cosa es como hacerlo desde codigo vb.net, basicamente lo que necesito es
alterar la lista de personas sobre la cual el word generaria las cartas,
esta lista de nombres me la proporcionaria una clase

en un seudo codigo quisiera ver como hacer esto:

dim w as new WordDocument
dim oPersonas as new clsPersona

w.mailMerge.Add( oPersonas.GetListaParaCarta )

w.GenerarCartasEnNuevoDoc

Gracias
Salu2
Sergio
Santa Cruz-Bolivia
DCE-2
 

Leer las respuestas

#1 Luis Miguel Blanco
11/03/2006 - 11:11 | Informe spam
Hola Sergio

La opción de combinación de correspondencia en Word está diseñada para que
sea una fuente de datos externa la que proporciona la información de las
diferentes personas por las que se va a generar una carta. Dicha fuente de
datos puede ser un archivo de texto, de Excel, base de datos Access, SQL
Server, etc., hay muchos tipos de soporte en este sentido, pero eso sí, dicho
soporte debe ser físico, es decir, yo no he encontrado una forma de indicar
al sistema de combinación de correspondencia, que utilice un objeto o clase
que sea el que proporcione la información de las personas para las cartas.

Ante esta situación puedes optar por generar desde vb.net todo el código
encargado de crear las cartas y el texto correspondiente, lo que te
permitiría utilizar tu clase que te proporciona los nombres de las personas.

En el caso de que necesites imperiosamente usar la opción de combinación de
correspondencia de Word, un posible abordaje en este sentido sería, utilizar
la clase que porpociona los nombre de personas para volcar dichos nombres a
un origen de datos que sí soporte Word, los anteriormente mencionados archivo
de texto, excel, o una tabla en Access, SQL Server.

Una vez pasada la información de la clase, desde vb.net deberíamos llamar a
la opción de combinación de correspondencia, estableciendo el origen de datos
que hemos creado, para que esta opción de Word se "alimente" con la
información de las personas para generar las diferentes cartas necesarias.

El ejemplo que te proporciono en el código fuente que tienes a continuación
se basa en la primera solución que te he propuesto: hacerlo todo desde vb.net
sin usar la combinación de correspondencia de Word. Si necesitaras
obligatoriamente utilizar combinación de correspondencia, dímelo a ver si
podemos "montar" también un ejemplillo, aunque por tus comentarios, creo que
esto será suficiente 8-)

'///////////////////////////////////////
' esta sería la clase que tiene los nombres de personas para las cartas
Public Class ClientesCorreo
Private aListaClientes As ArrayList

Public ReadOnly Property Cantidad() As Integer
Get
Return aListaClientes.Count
End Get
End Property

Public Sub New()
aListaClientes = New ArrayList
End Sub

Public Sub Agregar(ByVal sNombreCliente As String)
aListaClientes.Add(sNombreCliente)
End Sub

Public Function Obtener(ByVal nPosicion As Integer) As String
Return aListaClientes.Item(nPosicion - 1)
End Function
End Class

' este sería el formulario, en el que creamos la correspondencia
' manipulando Word desde código vb.net
Imports Microsoft.Office.Interop

Public Class Form1
Inherits System.Windows.Forms.Form

Private Sub btnEnviarCorresp_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles btnEnviarCorresp.Click
Dim oCliCorreo As ClientesCorreo = New ClientesCorreo
oCliCorreo.Agregar("Luis")
oCliCorreo.Agregar("Elena")
oCliCorreo.Agregar("Ana")

Dim oWord As Word.ApplicationClass
oWord = New Word.ApplicationClass
oWord.Visible = True
oWord.WindowState = Word.WdWindowState.wdWindowStateNormal

Dim nContador As Integer
For nContador = 1 To oCliCorreo.Cantidad
oWord.Documents.Add()
oWord.Selection.TypeText("Encabezado carta " &
nContador.ToString())
oWord.Selection.TypeParagraph()
oWord.Selection.TypeText("Estimado Sr/a. " &
oCliCorreo.Obtener(nContador))
oWord.Selection.TypeParagraph()
oWord.Selection.TypeText("Resto del texto de la carta")
Next
End Sub
End Class
'///////////////////////////////////////

Espero que sea lo que necesitas.

Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"SergioT" wrote:

Hola

Tengo la siguiente situacion, necesito crear en Word un documento tipo que
sea una carta y que pueda generar la misma carta para X cantidad de
personas, eso en Word es facil haciendo la "combinacion de documentos", la
cosa es como hacerlo desde codigo vb.net, basicamente lo que necesito es
alterar la lista de personas sobre la cual el word generaria las cartas,
esta lista de nombres me la proporcionaria una clase

en un seudo codigo quisiera ver como hacer esto:

dim w as new WordDocument
dim oPersonas as new clsPersona

w.mailMerge.Add( oPersonas.GetListaParaCarta )

w.GenerarCartasEnNuevoDoc

Gracias
Salu2
Sergio
Santa Cruz-Bolivia
DCE-2



Preguntas similares