Contar letras palabras parrafos en slides

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

Contar letras palabras parrafos en slides

Notapor arivas_2005 » Dom Mar 06, 2016 4:51 am

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   Expandir vistaContraer vista
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) 46 veces
Libreoffice 4.7
Puppy slacko 6 y windows 7
arivas_2005
 
Mensajes: 150
Registrado: Mié Nov 16, 2011 6:01 pm

Re: Contar letras palabras parrafos en slides

Notapor SLV-es » Dom Mar 06, 2016 11:52 am

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
Avatar de Usuario
SLV-es
 
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España

Re: Contar letras palabras parrafos en slides

Notapor arivas_2005 » Dom Mar 06, 2016 3:30 pm

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
arivas_2005
 
Mensajes: 150
Registrado: Mié Nov 16, 2011 6:01 pm

Re: Contar letras palabras parrafos en slides

Notapor fornelasa » Mar Mar 08, 2016 12:23 am

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   Expandir vistaContraer vista
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) 53 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
fornelasa
 
Mensajes: 3250
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Contar letras palabras parrafos en slides

Notapor mauricio » Mar Mar 08, 2016 5:12 am

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   Expandir vistaContraer vista
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
Avatar de Usuario
mauricio
 
Mensajes: 6061
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado