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

Discute sobre el procesador de textos
Responder
edgarcarranza
Mensajes: 20
Registrado: Lun Dic 22, 2008 11:18 pm

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

Mensaje 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.
Última edición por RGB-es el Dom Ago 19, 2012 10:07 am, editado 1 vez en total.
Razón: Marcar como resuelto
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

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

Mensaje por FJCC-ES »

Args tiene que ser una matriz

Código: Seleccionar todo

Dim args()
...
Set oDocument = oDeskTop.loadComponentFromURL(url, "_blank", 0, args()) 
edgarcarranza
Mensajes: 20
Registrado: Lun Dic 22, 2008 11:18 pm

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

Mensaje 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.
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

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

Mensaje 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
Última edición por FJCC-ES el Vie Ago 17, 2012 11:57 pm, editado 1 vez en total.
edgarcarranza
Mensajes: 20
Registrado: Lun Dic 22, 2008 11:18 pm

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

Mensaje 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.
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

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

Mensaje 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" )
edgarcarranza
Mensajes: 20
Registrado: Lun Dic 22, 2008 11:18 pm

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

Mensaje 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.
edgarcarranza
Mensajes: 20
Registrado: Lun Dic 22, 2008 11:18 pm

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

Mensaje 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.
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

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

Mensaje 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)
edgarcarranza
Mensajes: 20
Registrado: Lun Dic 22, 2008 11:18 pm

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

Mensaje 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.
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

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

Mensaje 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)
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
edgarcarranza
Mensajes: 20
Registrado: Lun Dic 22, 2008 11:18 pm

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

Mensaje por edgarcarranza »

Gracias Mauricio
RESUELTO
Gracias
Yoel
Mensajes: 1
Registrado: Lun Feb 12, 2018 6:08 pm

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

Mensaje 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
OppenOffice 3.3 Windows Sistema Op. 64 bits
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

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

Mensaje 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
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder