Página 1 de 1

[RESUELTO]Rellenar con un caractar, todos los parrafos de un

Publicado: Jue Ago 16, 2012 7:09 am
por edgarcarranza
Buenas, arme en vb un procedimiento, el cual detallo.
Ojo: aun no lo pruebo si funciona o no, pero la idea es que en un documento, recorra todo, y al final de cada parrafo, rellena de una linea doble o con el caracter "=" el final de dicha linea de fin de parrafo.
Ojala puedan ayudarme

Private Sub Command1_Click()
Dim oDocument As Object
Dim oServiceManager As Object
Dim oDeskTop As Object
Dim Enu As Object
Dim TextTables As Object
Dim ElementoTexto As Object
Dim Tabla As Object
Dim Filas As Object
Dim Columnas As Object
Dim oNuevoEstilo As Object
Dim tabs As Object 'no acepta New com.sun.star.Style.TabStop
Dim newstops(0) As Object
Set oServiceManager = CreateObject("com.sun.star.ServiceManager")
Set oDeskTop = oServiceManager.createInstance("com.sun.star.frame.Desktop")
url = "c:\uno.odt"
url = "file:///" & Replace(url, "\", "/")
Set oDocument = oDeskTop.loadComponentFromURL(url, "_blank", 0, args)
Set Enu = oDocument.Text.createEnumeration
Set Cursor = oDocument.Text.createTextCursor()
While Enu.hasMoreElements
Set ElementoTexto = Enu.nextElement
If ElementoTexto.supportsService("com.sun.star.text.Paragraph") Then
Set tabs = oDocument.Bridge_GetStruct("com.sun.star.Style.TabStop")
Cursor.gotoEndOfParagraph (False)
If Asc(Mid(Cursor.String, Len(Cursor.String))) = 46 Then '46 es el código ASCII del PUNTO (.)
tabs.position = 25000
tabs.Alignment = 2
tabs.FillChar = Asc("-")
Set newstops(0) = tabs
Cursor.ParaTabStops = newstops
Cursor.gotoEndOfParagraph (False)
Cursor.String = Chr(9)
End If
If Cursor.isEndOfParagraph() Then
Cursor.gotonextparagraph (True)
End If
End If
Wend
End Sub


cuando lo ejecuto en vb6, me sale justo en esta linea
Set oDocument = oDeskTop.loadComponentFromURL(url, "_blank", 0, args)
el mensaje de error, que dice "No coinciden los tipos"


diganme si esta bien, o si ya existe este tema resuelto.
Saludos. y gracias.

Re: Rellenar con un caractar, todos los parrafos de un Docum

Publicado: Jue Ago 16, 2012 3:44 pm
por FJCC-ES
Args tiene que ser una matriz

Código: Seleccionar todo

Dim args()
...
Set oDocument = oDeskTop.loadComponentFromURL(url, "_blank", 0, args()) 

Re: Rellenar con un caractar, todos los parrafos de un Docum

Publicado: Vie Ago 17, 2012 1:26 am
por edgarcarranza
Hola, muchas gracias por responder...
mira hice lo que me indicaste
el codigo quedaria asi:

Private Sub Command1_Click()
Dim args()
Dim url As String
Dim oDocument As Object
Dim oServiceManager As Object
Dim oDeskTop As Object
Dim Enu As Object
Dim TextTables As Object
Dim ElementoTexto As Object
Dim Tabla As Object
Dim Filas As Object
Dim Columnas As Object
Dim oNuevoEstilo As Object
Dim tabs As Object 'no acepta New com.sun.star.Style.TabStop
Dim newstops(0) As Object
Set oServiceManager = CreateObject("com.sun.star.ServiceManager")
Set oDeskTop = oServiceManager.createInstance("com.sun.star.frame.Desktop")
url = "c:\uno.odt"
url = "file:///" & Replace(url, "\", "/")
Set oDocument = oDeskTop.loadComponentFromURL(url, "_blank", 0, args())
Set Enu = oDocument.Text.createEnumeration
Set Cursor = oDocument.Text.createTextCursor()
While Enu.hasMoreElements
Set ElementoTexto = Enu.nextElement
If ElementoTexto.supportsService("com.sun.star.text.Paragraph") Then
Set tabs = oDocument.Bridge_GetStruct("com.sun.star.Style.TabStop")
Cursor.gotoEndOfParagraph (False)
If Asc(Mid(Cursor.String, Len(Cursor.String))) = 46 Then '46 es el código ASCII del PUNTO (.)
tabs.position = 25000
tabs.Alignment = 2
tabs.FillChar = Asc("-")
Set newstops(0) = tabs
Cursor.ParaTabStops = newstops
Cursor.gotoEndOfParagraph (False)
Cursor.String = Chr(9)
End If
If Cursor.isEndOfParagraph() Then
Cursor.gotonextparagraph (True)
End If
End If
Wend


End Sub


Pero justo en
Set oDocument = oDeskTop.loadComponentFromURL(url, "_blank", 0, args())
Me sale el error:
Error 1001 en tiempo de ejecucion
com.sun.star.lang.IllegalArgumentException: URL seems to be an unsupported one

Agradeceria ayudarme, o darme una opcion de solucion al problema del enunciado.
Saludos.

Re: Rellenar con un caractar, todos los parrafos de un Docum

Publicado: Vie Ago 17, 2012 2:33 am
por FJCC-ES
El error significa que no existe un archive con el URL igual al valore de la variable url. Sugiero que verifica que existe el archivo c:\uno.odt y que url = file:///c:/uno.odt

Re: Rellenar con un caractar, todos los parrafos de un Docum

Publicado: Vie Ago 17, 2012 2:46 pm
por edgarcarranza
Muchas Gracias.
Ahora al compilar, dice que el error esta en:

Set tabs = oDocument.Bridge_GetStruct("com.sun.star.Style.TabStop")

El mensaje es: "Error de automatizacion"

Antes de nada, estoy muy agradecido, por la ayuda.
Gracia de verdad.
Saludos.

Re: Rellenar con un caractar, todos los parrafos de un Docum

Publicado: Vie Ago 17, 2012 3:40 pm
por FJCC-ES
Bridge_GetStruct () es un método del oServiceManager

Código: Seleccionar todo

Set tabs = oServiceManager.Bridge_GetStruct("com.sun.star.Style.TabStop" )

Re: Rellenar con un caractar, todos los parrafos de un Docum

Publicado: Vie Ago 17, 2012 9:34 pm
por edgarcarranza
Hola
Gracias... por el tiempo dedicado a mi pregunta.

Te cuento que hice el cambio, pero me sigue dando el mismo problema.
El mismo error,
El mensaje es: "Error de automatizacion"
Gracias.

PD. Una consulta
Como recorrer un Documento completo
y ponerle lo siguiente "===" al final de cada farrafo del documento.

Solo esos 3 caracteres "=" por farrafo.
Saludos.

Re: Rellenar con un caractar, todos los parrafos de un Docum

Publicado: Vie Ago 17, 2012 9:53 pm
por edgarcarranza
Gracias.
La solucion solo era:
Set tabs = oServiceManager.Bridge_GetStruct("com.sun.star.style.TabStop" )
Style por style
Pero sigue el problema
Ahora el problema es:

If Asc(Mid(Cursor.String, Len(Cursor.String))) = 46 Then '46 es el código ASCII del PUNTO (.)

Me dice que el Error es: Llamada a procedimientos y argumentos no validos.

Gracias.

Re: Rellenar con un caractar, todos los parrafos de un Docum

Publicado: Sab Ago 18, 2012 1:57 am
por FJCC-ES
No veo error en

Código: Seleccionar todo

If Asc(Mid(Cursor.String, Len(Cursor.String))) = 46 Then


¿Qué pasa si el código es

Código: Seleccionar todo

w = Cursor.String
x = Len(Cursor.String)
y = Mid(w,x)
z = Asc(y)
If z = 46 Then
PD. Una consulta
Como recorrer un Documento completo
y ponerle lo siguiente "===" al final de cada farrafo del documento.

Solo esos 3 caracteres "=" por farrafo.
Esto se puede hacer sin una macro
Seleccione Editar → Buscar y Reemplazar
En el cuadro Buscar escriba .* (un Punto y un asterisco)
En el cuadro Reemplazar Por escriba &===
Elija Más Opciones y marque Expresiones Regulares
Pulse Reemplazar Todo

En Expresiones Regulares:
. (Punto) Representa cualquier carácter menos un salto de línea o de párrafo.
* Significa busca cero o más de los caracteres que preceden a "*".
& Significa agrega la cadena de caracteres que se encontró según los criterios de búsqueda

Una macro (en OpenOffice Basic) que hace lo mismo es

Código: Seleccionar todo

oDocument = ThisComponent
Desc = oDocument.createReplaceDescriptor()
Desc.SearchRegularExpression = True
Desc.SearchString = (".*")
Desc.ReplaceString = ("&===")
oDocument.replaceAll(Desc)

Re: Rellenar con un caractar, todos los parrafos de un Docum

Publicado: Sab Ago 18, 2012 3:17 pm
por edgarcarranza
Gracias, muchas gracias, parece que la salida es esa "expresiones regulares".
Una consulta mas, para cerrar este tema, como seria en una Macro lo siguiente, en ese orden:

1.Buscar por:
^[:space:]*$
Reemplazar por: NADA

2. Buscar por
^$
Reemplazar por: NADA

3.Buscar por
$
Reemplazar por: ===\n


Gracias.

Re: Rellenar con un caractar, todos los parrafos de un Docum

Publicado: Sab Ago 18, 2012 3:38 pm
por mauricio
Mi amigo FJCC-ES ya te dio la respuesta, solo tienes que repetir la secuencia que propones:

Código: Seleccionar todo

    oDocument = ThisComponent
    Desc = oDocument.createReplaceDescriptor()
    Desc.SearchRegularExpression = True
    Desc.SearchString = (".*")
    Desc.ReplaceString = ("&===")
    oDocument.replaceAll(Desc)

Re: Rellenar con un caractar, todos los parrafos de un Docum

Publicado: Dom Ago 19, 2012 5:51 am
por edgarcarranza
Gracias Mauricio
RESUELTO
Gracias

Re: [RESUELTO]Rellenar con un caractar, todos los parrafos d

Publicado: Lun Feb 26, 2018 4:42 pm
por Yoel
Hola amigos, mucho gusto saludarlos. Amigos, soy bastante nuevo con el tema de programación en macros. Pero tengo que realizar el mismo requisito que ustedes están resolviendo, estoy que sigo los paso a detalle pero tengo errores en el código. Por favor me podrian ayudar con dicho alcance le agradeceria mucho. el problema que tengo es en la línea: Set tabs = oServiceManager.Bridge_GetStruct("com.sun.star.style.TabStop" )
en el error me muestra que:
Propiedad o método no encontrados: Bridge_GetStruct. Estoy realizando OpenOffice 3.3

Re: [RESUELTO]Rellenar con un caractar, todos los parrafos d

Publicado: Lun Feb 26, 2018 5:02 pm
por mauricio
No es recomendable continuar temas tan viejos... es mejor que abras un nuevo tema, haciendo referencia a este...

La línea que te da error, es por que esta macro esta pensada para usarse desde VB, "fuera" de OpenOffice, dentro de OpenOffice puedes usar

Código: Seleccionar todo

oStruct = CreateUnoStruct( "com.sun.star.Style.TabStop" )
pero... como dije, el código es para usarse de VB, varias cosas te fallaran si no consideras esto.

Saludos