¡Hola a todos!
Estoy usando una macro para pegar texto sin formato en Writer. Me gustaría poder agregarle la capacidad de separar el texto que pega la macro en párrafos de 4 líneas o 70 palabras. La macro que estoy usando es la siguiente y se encuentra en este enlace:
' Copyright (c) 2011 Frieder Delor, Mailto: delorfr@googlemail.com
'
' This program is free software: you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation, either version 3 of the License, or
' (at your option) any later version.
'
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' GNU General Public License for more details.
'
' You should have received a copy of the GNU General Public License
' along with this program. If not, see <http://www.gnu.org/licenses/>.
Option Explicit
Sub InsertClipboardTextInWriter()
Dim sText As String
sText= (getClipboardText)
sText = Replace (sText,Chr(10)," ") ' Replace line breaks with white spaces
sText = Replace (sText,Chr(13)," ") ' Replace paragraph breaks with white spaces
WriteCursorPosition(sText) ' Paste in Writer
End Sub ' InsertClipboardTextInWriter
Sub WriteCursorPosition(sText as String)
'''This sub is taken from http://www.oooforum.org/forum/viewtopic.phtml?t=75409'''
'''Paste text in Writer at the position of the cursor'''
Dim oViewCursor As Object ' com.sun.star.text.XTextViewCursor
Dim oText As Object
oViewCursor = ThisComponent.GetCurrentController.ViewCursor
If IsEmpty(oViewCursor.Cell) Then
oText = ThisComponent.text
Else
oText = oViewCursor.Cell.Text
End If
oText.insertString(oViewCursor, sText, false)
End Sub ' WriteCursorPosition
Function getClipboardText() As String
'''Returns a string of the current clipboard text'''
Dim oClip As Object ' com.sun.star.datatransfer.clipboard.SystemClipboard
Dim oConverter As Object ' com.sun.star.script.Converter
Dim oClipContents As Object
Dim oTypes As Object
Dim i%
oClip = createUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
oConverter = createUnoService("com.sun.star.script.Converter")
On Error Resume Next
oClipContents = oClip.getContents
oTypes = oClipContents.getTransferDataFlavors
For i = LBound(oTypes) To UBound(oTypes)
If oTypes(i).MimeType = "text/plain;charset=utf-16" Then
Exit For
End If
Next
If (i >= 0) Then
On Error Resume Next
getClipboardText = oConverter.convertToSimpleType _
(oClipContents.getTransferData(oTypes(i)), com.sun.star.uno.TypeClass.STRING)
End If
End Function ' getClipboardText
Lo que quiero lograr es lo siguiente:
- Copiar el texto deseado desde el navegador.
- Usar la macro para que:
2.1 Tome el texto desde el portapapeles.
2.2 Limpie el formato que tenga.
2.3 Lo pegue donde está el cursor en el documento (hasta este punto todo lo hace la macro que está en el enlace sin problemas). - Que la macro también divida el texto pegado en párrafos cada cuatro líneas o cada 70 palabras (esto es lo que me gustaría agregar a la macro y no sé cómo hacerlo).
¿Alguna sugerencia de cómo lograrlo?