Contar letras palabras parrafos en slides

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
arivas_2005
Mensajes: 162
Registrado: Mié Nov 16, 2011 6:01 pm

Contar letras palabras parrafos en slides

Mensaje por arivas_2005 »

Saludos

Estoy intentando calcular la cantidad de letras, palabras y párrafos que tiene cada contenedor de texto en una diapositiva.
He buscado en Internet y aún no encuentro ejemplos de como hacerlo.
Hasta el momento cuento con el siguiente código

Código: Seleccionar todo

Sub Revisando_texto_letras_palabras_Y_parrafos_Slides
  
  '----------------------------------
   'Globalscope.BasicLibraries.LoadLibrary( "MRILib" )
  
  numslides = Thiscomponent.getDrawPages.Count
  
  if numslides>0 then
    
  '------------------------ Slide 1		  
	    oDraw = ThisComponent.Drawpages.getByIndex(0)		
		numshapes=oDraw.getCount()
		  
			For i = 0 To oDraw.getCount() - 1		
			    oObj = oDraw.getByIndex(i)
			    tiposhape=oObj.getShapeType			       
			    select1=Thiscomponent.CurrentController.select(oObj)	
			    if tiposhape="com.sun.star.presentation.TitleTextShape" or tiposhape="com.sun.star.presentation.OutlinerShape" then
			    	
			    '	mri oObj.text.createenumeration
			       'mri oText.text
				   oText = oObj.getText()
				  ' stop
				   oCurs = oText.createTextCursor()
						   
				   ParagraphEnum = oText.createEnumeration
					   While ParagraphEnum.hasMoreElements
					      Paragraph = ParagraphEnum.nextElement
					     
					      msgbox  Paragraph.getstring
						     
					      oCurs.gotoRange(Paragraph.Anchor,true) ' supondo que seleccionando el texto dentro del shape se podría
                                                                            '.--... solo un intento
						      
					      PortionEnum = Paragraph.createEnumeration  
         ' esto para saber la fuente por si usan distintas en el mismo parrafo, taqmbien lo necesito
						      While PortionEnum.hasMoreElements
						         Portion = PortionEnum.nextElement
						         If Portion.String <> "" Then
						            FontName = Portion.CharFontName
						          '  Print FontName
						         End if
						      Wend
						Wend					' 
			    endif
			next
  		endif
end sub
Tal vez ya tenga algo para calcular los párrafos de cada contenedor pero no tengo ni idea de como contar las palabras y las letras.
Mis agradecimientos anticipados por la colaboración
Adjuntos
CONTARLETRASPALSPARRS2.odp
(23.79 KiB) Descargado 114 veces
Libreoffice 4.7
Puppy slacko 6 y windows 7
Avatar de Usuario
SLV-es
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España
Contactar:

Re: Contar letras palabras parrafos en slides

Mensaje por SLV-es »

No he analizado profundamente el código. Por dar ideas:
  • Dado que puedes cargar el contenido de un contenedor en un objeto oText
    • Cargar el texto en una variable, en la que puedes sustituir carácteres como , . intro por espacios, luego dos o más espacios por espacio, y luego contar el número de espacios. Con eso obtendrás las palabras
    • Cargar el texto en una variable, en la que puedes eliminar los espacios e intros y la longitud del texto será el número de letras, con signos de puntuación incluídos.
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
arivas_2005
Mensajes: 162
Registrado: Mié Nov 16, 2011 6:01 pm

Re: Contar letras palabras parrafos en slides

Mensaje por arivas_2005 »

Saludos.
Omití citar que necesito contar las lineas del contenedor y las lineas por cada parrafo como parte de la tarea de revisar los contenidos por cada slide.
Nuevamente gracias por sus orientaciones y soluciones
Libreoffice 4.7
Puppy slacko 6 y windows 7
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Contar letras palabras parrafos en slides

Mensaje por fornelasa »

arivas_2005 escribió:Estoy intentando calcular la cantidad de letras, palabras y párrafos que tiene cada contenedor de texto en una diapositiva.
No digo que lo que sigue lo resolverá porque influyen muchos puntos, los espacios de más, las comas ..... etc, pero pudierá ser una buena guia:
De acuerdo al archivo que envias nota como en el segundo "parrafo" tienes espacios de mas .....

Código: Seleccionar todo

Sub Revisando_texto_letras_palaabras_Y_parrafos
  Dim i As Long
  Dim oDraw
  Dim oObj
  numslides = Thiscomponent.getDrawPages.Count
  if numslides>0 then
'------------------------ Slide 1		  
	    oDraw = ThisComponent.Drawpages.getByIndex(0)		
		numshapes=oDraw.getCount()
			For i = 0 To oDraw.getCount() - 1		
			    oObj = oDraw.getByIndex(i)
			    tiposhape=oObj.getShapeType			       
			    select1=Thiscomponent.CurrentController.select(oObj)	
			    if tiposhape="com.sun.star.presentation.TitleTextShape" or tiposhape="com.sun.star.presentation.OutlinerShape" then
				   oText = oObj.getText()
			   oCurs = oText.createTextCursor()
				   ParagraphEnum = oText.createEnumeration
				    numero = 1  
					   While ParagraphEnum.hasMoreElements
					      Paragraph = ParagraphEnum.nextElement
					      numero = numero + 1
					      texto = Paragraph.GetString
					      msgbox  Paragraph.getstring
					      msgbox "letras " & len(Replace(texto, " ", ""))'len(texto)
					      msgbox "Palabras " & (len(texto) - len(Replace(texto, " ", ""))+1)
					      oCurs.gotoRange(Paragraph.Anchor,true) 'False)
				      PortionEnum = Paragraph.createEnumeration
						      While PortionEnum.hasMoreElements
						         Portion = PortionEnum.nextElement
						         If Portion.String <> "" Then
						            FontName = Portion.CharFontName
						          '  Print FontName
						         End if
						      Wend
						Wend					' 
			    endif
			next
  		endif
msgbox "Parrafos " & numero
end sub
Es claro que para obtener mejores resultados debemos hacer más codigo suprimiendo las comas, los puntos los guiones si los hubiera, en una estructura ideal (sin signos de puntuación por ejemplo) mira como si cuadra:
Insisto es una guía, lo demás es facil de hacer :roll:
Tambien por ejemplo, ¿los espacios deben contar como letra, las comas para el largo del texto ....?
Saludos, Federico.
Adjuntos
CONTARLETRASPALSPARRS2.odp
Ejemplo guía.
(21.1 KiB) Descargado 119 veces
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Contar letras palabras parrafos en slides

Mensaje por mauricio »

arivas_2005 escribió:Estoy intentando calcular la cantidad de letras, palabras y párrafos que tiene cada contenedor de texto en una diapositiva.
Toma en cuenta que casi cualquier objeto en Impress puede llegar a ser un contenedor de texto, si no quieres todos, tienes que discriminar su tipo...

Prueba con:

Código: Seleccionar todo

Sub Main
	REM util = createUnoService("org.universolibre.EasyDev")
	doc = ThisComponent
	dp = doc.getDrawPages()
	
	doc_tmp = new_doc()
	
	For i = 0 To dp.getCount() - 1
		page = dp.getByIndex(i)
		For j = 0 To page.getCount() - 1
			obj = page.getByIndex(j)
			If obj.supportsService("com.sun.star.drawing.Text") Then
				MsgBox get_info(doc_tmp, obj)			
			End If
		Next j
	Next i
	
	doc_tmp.dispose()
	
End Sub


Function new_doc() As Object
	Dim args(0) As New "com.sun.star.beans.PropertyValue"
 
    args(0).Name = "Hidden"
    args(0).Value = True
    new_doc = StarDesktop.loadComponentFromURL("private:factory/swriter", "_default", 0, args)
End Function


Function get_info(doc, shape) As String
	doc.getText().setString(shape.String)
	'MsgBox shape.getShapeType() & Chr(10) & shape.String & Chr(10) & Chr(10) & doc.getText().getString() 
	Wait 300
	data = doc.getDocumentProperties().DocumentStatistics
	info = "Objeto: " & shape.getShapeType() & Chr(10)
	If UBound(data) = 7 Then
		info = info & "Parrafos: " & data(4).Value & Chr(10)
		info = info & "Palabras: " & data(5).Value & Chr(10)
		info = info & "Letras: " & data(6).Value & Chr(10)
		info = info & "Letras sin espacios: " & data(7).Value
	End If
	get_info = info
End Function
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder