Enlace a marcadores del WORD


([N3] blavan) #1

Trabajando con macros de EXCEL he logrado que un fichero txt generado desde Velneo lo escriba en determinadas celdas y a continuación me enlaza con un documento word en donde tengo definidos marcadores y me abre el documento word con la información que previamente salio de Velneo

El paso a través de Excel es invisible

Estoy contento pero me gustaria efectuar este enlace a traves vbScript, quise intentarlo a través del tutorial vbScript pero me lio y no sigo.

Alguno lo ha logrado?
Gracias


([N1] Roberto Blasco) #2

Hola benito

El código vbs es el siguiente

Set objWord = CreateObject("Word.Application")
objWord.Visible = False

Set objDoc = objWord.Documents.Open("ruta_a_mi_documento_word.doc")
Set objRange = objDoc.Bookmarks("nombre_de_mi_marcador").Range
objRange.Text = "Texto que incrusto en el marcador"

objWord.Quit

Pero hay alternativas mucho más interesantes para crear documentos de cualquier formato y multiplataforma.

Video YouTube

Las alternativas libres son las siguientes

- itext + jasperreports
- itext + irtf
- poi

Un saludo. Roberto Blasco.


([N3] blavan) #3

Hola Robert, cuanto sabes y que rápido me contestas. Gracias

Lo voy a probar


([N3] blavan) #4

Gracias, me funciono, lo único que hay que cambiar "" por ', pero bueno ya se uno cuenta al ver el tutor


([N1] Roberto Blasco) #5

Hola benito

Lo bueno ... y malo de mi trabajo es que hay que saber de todo, jajajajajaja

Un saludo. Roberto Blasco.


([N4] Fran) #6

Buenas noches:
.
Estoy trasteando con este tema de los documentos de Word. Funciona bien cuando el nombre del fichero, marcador y contenido son textos fijos entre comillas simples.
.
Intentando utilizar variables o campos para el nombre del fichero, marcador o contenido no consigo hacerlo funcionar.
.
¿Cómo utilizais campos o variables en estos scripts?.
.
Gracias anticipadas.
.
Un saludo,
.
Fran.
EfeUno Consultores de Gestión y Software,S. L.
www.efeuno.org


([N1] Velasco) #7

Buenas Fran.

Yo lo hago mediante la open app vxWinScript, aunque da lo mismo generar el archivo .vbs

Para mandar una variable sería:

“Set objRange = objDoc.Bookmarks(” +"\c"+“COLEGIADO”+"\c"+").Range <------ MARCADOR
objRange.Text = " +"\c"+ choose(#SEX , "Doña " , “Don “) + COLEGIADO +”\c” <-------- VARIABLE

Con campo sería:

"Set objRange = objDoc.Bookmarks(" +"\c"+"COLEGIADO"+"\c"+").Range
objRange.Text = " +"\c"+ choose(#SEX , "Doña " , "Don ") + #NAME + " " + #APE_1 +"\c"

Un saludo.


([N4] Fran) #8

Gracias Jorge.
.
Me faltaba el detalle del \c
.
Un saludo,
.
Fran.


([N4] Ramon Denuc) #9

Hola Foro,

Estoy utilizando este sistema para crear un documento Word, todo bien, pero tengo problemas con un campo que es de texto enriquecido, me podéis ayudar como tengo que pasar los datos del campo con texto enriquecido. He probado de mil maneras, pero nada.

Saludos


([N4] eic) #10

Hola.

Con el texto enriquecido lo vas a tener más difícil, porque internamente es código HTML, por lo que no lo podrás usar con esas instrucciones. La única forma que veo de pasarlo es: 1) Quitar las etiquetas HTML, convirtiéndolo en texto plano, 2) Eliminando los saltos de línea que pueda tener y 3) pasarlo al documento como si fuera un texto normal. Pero… lógicamente, pierdes todo el formato que pueda tener el texto (negritas, cursivas, tipos de letra) y los saltos de línea.


([N4] Ramon Denuc) #11

Hola Fran,

Gracias por tu contestación. Me lo estaba suponiendo que la contestación seria parecida a la que me acabas de dar.

Entonces, otra pregunta.

¿Sabeis de otra alternativa a poder generar documentos DOC desde Velneo bajo plantilla o no, y que además pueda pasar texto enriquecido?

Saludos


([N3] pacosatu) #12

Hola Ramón.

Si ya estás trabajando con macros de Word, te será fácil ejecutar la siguiente Macro:

  • Guardas a un fichero temporal texto.html el contenido del campo enriquecido.
  • Abres el fichero html con Word.
  • Seleccionas todo el texto y Copias al portapapeles.
  • Te cambias a la plantilla de Word que estás rellenando.
  • Seleccionas el marcador que debe recoger el texto enriquecido y pegas desde el portapapeles.

Pruébalo y nos cuentas.
Saludos
Paco Satué


([N4] Ramon Denuc) #13

Muchas gracias Paco,

Pero todo esto que estoy montando es para crear un Catalago de Consentimientos, en total son unos 18 consentimientos que tiene la Clínica, y por cada uno de estos Consentimientos hay 8 Apartados que el Usuario final tiene que escribir para crear el Consentimiento que el Cliente de la Clínica deberia firmar.

La forma que veo y que me explicas, la operativa entiendo que de oculta para el Usario final no lo es nada, y además hacer ocho veces esa operativa no termino de tenerlo Claro.

NOTA: Mientras he puesto la anterior entrada en este Foro, he cambiado los campos de Enriquecidos a normales, y ahora me encuentro que falla porque al haber saltos de linea en los campos, el generador da fallo.

(Madre mia, todo se va al traste, por unos simples saltos de linea. No me lo puedo creer)

Saludos



([N1] wikan) #14

Y, ¿cambiando la forma y usar vReport?

Los consentimientos no son fijos en la plantilla?, no se debería rellenar solo los datos del paciente?, soy un ignorante en dicho tema.


([N4] Ramon Denuc) #15

Manuel,

Los Apartados son fijos, pero adaptables a cada Consentimiento, es decir, los apartados para una Liposucción son 8 pero son diferentes a los otros 8 de un Consentimiento de una Rinoplastia.

Donde son iguales en todos los Consentimiento es en la parte final, donde van los datos del paciente, y las firmas.

Por eso de montar un documento .DOC como plantilla, y de esa manera a trabes de una tabla de Consentimientos el Usuario del programa solo tenia que seleccionar que Consentimiento tiene que generar al Paciente en cuestión.

Y de todos los campos que tengo en dicha tabla, todos los que son campos Alfanuméricos, no hay ningún problema en pasarlo al DOC a través de los Marcadores insertados en dicho DOC. Pero todos aquellos campos que son Objeto.Texto son los quedan el problema.

Si veo que no puedo utilizar este sistema, probare tu alternativa, y mirar de utilizar vReport

Saludos



([N1] wikan) #16
  • Otra opción es un doc por cada tipo de operación y así rellenas solo los nombres, es algo que se hace una vez y ya está.
  • En lugar del usuario elegir cada vez los consentimientos, es tener una tabla de operaciones y asignar los consentimientos. Estos serán el detalle de un informe y a su vez los datos del paciente.

([N4] Ramon Denuc) #17

Manuel,

Eso también lo pense al principio, en el momento de analizar y decidir el montaje, y quise que los consentimientos fueran los más configurables para el Usuario final, y que además no necesitaran de mi para crear más consentimientos, ya que con el sistema que ya tenia montado con una sola plantilla DOC el usuario siguiendo cada apartado del consentimiento solo tenia que ir rellenando y listos.

Saludos


([N3] pacosatu) #18

Hola Ramon.

Dos aclaraciones primero.
1º - La macro que te he propuesto se ejecuta con el Word oculto y el Usuario no ve nada hasta el final, que es cuando mostramos el Consentimiento listo para imprimir. Incluso no es necesario mostrar el documento Word, simplemente se guarda y se imprime para que lo firme el paciente.
2º- Los retornos de carro en VBScript se consideran un caracter especial. Debes usar la expresión chr(13) + chr(10) o la constante vbCrLf.

De todas formas, como indica Manuel, si no tienes obligación de usar una plantilla Word, la mejor solución es VReport.

La automatización de Word con Velneo no es precisamente un camino de rosas.

Saludos
Paco Satué


([N4] Ramon Denuc) #19

Hola Paco,

Llevo rato intentando aplicar la expresión chr(13) + chr(10) o la constante vbCrLf que me comentas, pero no consigo que funcione.

Me puedes aconsejar la forma de aplicar, para que no de error.

Saludos
Y muchas gracias.


([N3] pacosatu) #20

Hola Ramon.

Pongo un ejemplo:


Rem ( Muestra un mensaje con el motor de Scripts WSH )
Set ( CMENSAJE, "Mensaje desde la Aplicación Velneo\nLa \c\cHora\c\c actual es: " + currentTime() +
"\n\nCaché del cliente: " + sysCacheClientPath )
Libre
Rem ( Sustituimos los retornos por la constante vbCrLf de VBScript)
Set ( CMENSAJE, replaceString(CMENSAJE, "\n", "\c + vbCrLf + \c") )
Libre
Rem ( Construimos el código VBScript y ejecutamos)
Set ( CCODIGO, "MSGBOX (\c" + CMENSAJE + "\c)" )
Set ( LOK, fun:FUN_WSH_EJECUTAR@MiApp.app(CCODIGO) )

El código VBScript queda:
MSGBOX (“Mensaje desde la Aplicación Velneo” + vbCrLf + “La ““Hora”” actual es: 11:10” + vbCrLf + “” + vbCrLf + “Caché del cliente: C:/Users/yo/Velneo/cacherun/127.0.0.1/”)

Saludos
Paco Satué